音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

用 C 的看過(guò)來(lái),不上機(jī)試,你能說(shuō)對(duì)程序結(jié)果嗎?

作者:wuljia 欄目:單片機(jī)
用 C 的看過(guò)來(lái),不上機(jī)試,你能說(shuō)對(duì)程序結(jié)果嗎?
程序如下
   unsigned CHAR a;
   unsigned CHAR b;
   a=250;
   b=44;

   則此時(shí)寫(xiě)條件語(yǔ)句:

   if(b==a+50)
   if(b==(unsigned CHAR)a+50)
   if(b==(unsigned CHAR)(a+50))
   if(b==a+(unsigned CHAR)50)

   都成立么?

2樓: >>參與討論
滌綸
回復(fù)
 又問(wèn),誰(shuí)又會(huì)寫(xiě)這么無(wú)聊的語(yǔ)句呢?

3樓: >>參與討論
wuljia
不是無(wú)聊的語(yǔ)句
是我寫(xiě)的一個(gè)條件語(yǔ)句,被發(fā)現(xiàn)功能不太正常
有時(shí)行,有時(shí)不行,
調(diào)試過(guò)程中,引出來(lái)的這個(gè)問(wèn)題!

4樓: >>參與討論
taoest
是無(wú)聊
a+50超出了范圍,寫(xiě)代碼的時(shí)候就要考慮這些問(wèn)題,不能這么寫(xiě)。
如果硬要這么寫(xiě),那你就還是用匯編吧,高級(jí)語(yǔ)言不適合你。

5樓: >>參與討論
wuljia
看來(lái)沒(méi)有人理解真正的意思
我想表達(dá)的是
C語(yǔ)言中,對(duì)數(shù)值運(yùn)算溢出的處理,
如果我們寫(xiě)
unsigned CHAR a;
unsigned CHAR b;
a=250
b=a+50;
那么b是多少?答案是44

如果我們寫(xiě)
unsigned CHAR a;
unsigned CHAR b;
a=250;
b=44;
if(b==a+50)
{
   此處的語(yǔ)句會(huì)執(zhí)行嗎?答案是?不會(huì)。。
}


* - 本貼最后修改時(shí)間:2006-5-3 23:17:14 修改者:wuljia

6樓: >>參與討論
hunao
要看你的編譯器對(duì)常數(shù)的類型是怎么處理的
 
7樓: >>參與討論
wuljia
編譯器是 Keil C 7.02
 
8樓: >>參與討論
gao8051
垃圾
 
9樓: >>參與討論
hotpower
我眩暈~~~if(b=a+50)永遠(yuǎn)為真,b=a+50本身就是44
 
10樓: >>參與討論
computer00
哈哈~~~~倒過(guò)來(lái)寫(xiě)就沒(méi)那么容易犯錯(cuò)了~~~~~
if(a+50==b).......

11樓: >>參與討論
cf100
不確定因素的引入,本來(lái)就是不成熟的表現(xiàn)
c=a+50;
if(b==c)

這樣就沒(méi)歧義。

12樓: >>參與討論
hunao
寫(xiě)成這樣,就和編譯器無(wú)關(guān)了
常數(shù)的類型和編譯器有關(guān)
如果編譯器把常數(shù)類型定為CHAR型:
a + 50 => (uCHAR)250 + (uCHAR)50 =>  (uCHAR)44
則 b == a + 50 結(jié)果為真。

如果編譯器把常數(shù)類型定為int 型:
a + 50 => (uCHAR)250 + (int)50 => (int)250 + (int)50 = (int)300
則 b == a + 50 => (uCHAR)44 == (int) 300 => (int)44 == (int)300
結(jié)果為假。

如果這樣寫(xiě):b - a == 50 因?yàn)?a、b的類型是確定的,所以 b - a 的值也是確定,就與編譯器的常數(shù)類型無(wú)關(guān)了

做判斷的時(shí)候,盡量將常數(shù)單獨(dú)放到比較操作符的一邊




13樓: >>參與討論
robshine
好呢!定義不明確
 
14樓: >>參與討論
wuljia
哈哈,樓上的,請(qǐng)你實(shí)際試一下
你說(shuō)的是你所說(shuō)的,-----------------------
常數(shù)的類型和編譯器有關(guān)
如果編譯器把常數(shù)類型定為CHAR型:
a + 50 => (uCHAR)250 + (uCHAR)50 =>  (uCHAR)44
則 b == a + 50 結(jié)果為真。
---------------------------------

unsigned CHAR a;
unsigned CHAR b;
a=250;
b=44;
if(b==a+(uCHAR)50)  //不管編譯器咋處理,強(qiáng)制轉(zhuǎn)換成uCHAR
{
   請(qǐng)你看看能執(zhí)行到這里嗎?
}


15樓: >>參與討論
wuljia
按照 hunao 的說(shuō)法
按照 hunao 的說(shuō)法
---------------
如果這樣寫(xiě):b - a == 50 因?yàn)?a、b的類型是確定的,所以 b - a 的值也是確定,就與編譯器的常數(shù)類型無(wú)關(guān)了

做判斷的時(shí)候,盡量將常數(shù)單獨(dú)放到比較操作符的一邊
--------------
unsigned CHAR a;
unsigned CHAR b;
main()
{
a=250;
b=50;
if(a+b==44)  //常數(shù)放到一邊,同時(shí),a,b類型已確定,條件該成立了吧
{
   b=3;     //可實(shí)際上這里仍然執(zhí)行不到。
}
}

16樓: >>參與討論
wuljia
哈哈 圈圈說(shuō) if(a+50==b) 成立嗎?
哈哈~~~~倒過(guò)來(lái)寫(xiě)就沒(méi)那么容易犯錯(cuò)了~~~~~

if(a+50==b).......

-------------------------
你是說(shuō)這樣就成立了是嗎?
-------------------------
unsigned CHAR a;
unsigned CHAR b;
main()
{
   a=250;
   b=44;
   if(a+50==b)
   {
      b=3;//請(qǐng)你看看能執(zhí)行到這里嗎?
   }
}
-------------------------
   if(a+(unsigned CHAR)50==b)  //這個(gè)條件語(yǔ)句仍然不成立!呵呵


17樓: >>參與討論
computer00
跟你編譯器的設(shè)置有關(guān)。
如果你勾上下圖中紅色圈中的選項(xiàng),那么就會(huì)擴(kuò)展成16bit的整數(shù)來(lái)計(jì)算,那當(dāng)然是不相等的了。

如果不勾上,就當(dāng)作8bit的來(lái)算,那就是相等的了。

18樓: >>參與討論
hunao
這個(gè)選項(xiàng)編譯器默認(rèn)是選中的
 
19樓: >>參與討論
computer00
所以嘛,還是老老實(shí)實(shí)的寫(xiě)程序,最好不要依賴編譯器
 
20樓: >>參與討論
wuljia
呵呵 圈圈的是正解啦
 
21樓: >>參與討論
王紫豪
這些跟編譯器、平臺(tái)都有關(guān)系,建議大家編程序不要“冒險(xiǎn)”。
 
22樓: >>參與討論
hunao
要感謝樓主讓我知道了我在概念上的問(wèn)題。我有點(diǎn)想當(dāng)然了,慚愧。
 
23樓: >>參與討論
dai_weis
同意圈圈的老老實(shí)實(shí)寫(xiě)程序,還有不要吝嗇括號(hào)的使用。
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
51系列或196系列單片機(jī)中有兩個(gè)串口的有那些?多謝
有哪位xd用過(guò)at45db161d,請(qǐng)進(jìn)來(lái)
能用單片機(jī)來(lái)控制小型觸摸屏(5英寸左右的)嗎?
問(wèn)一下,現(xiàn)在KEIL的最高版本是多少?
OP07運(yùn)放問(wèn)題
免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)