|
|||||||||||
| 技術(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ī) |
程序如下 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樓: | >>參與討論 |
| 作者: 滌綸 于 2006/4/30 20:45:00 發(fā)布:
回復(fù) 又問(wèn),誰(shuí)又會(huì)寫(xiě)這么無(wú)聊的語(yǔ)句呢? |
|
| 3樓: | >>參與討論 |
| 作者: wuljia 于 2006/4/30 21:13:00 發(fā)布:
不是無(wú)聊的語(yǔ)句 是我寫(xiě)的一個(gè)條件語(yǔ)句,被發(fā)現(xiàn)功能不太正常 有時(shí)行,有時(shí)不行, 調(diào)試過(guò)程中,引出來(lái)的這個(gè)問(wèn)題! |
|
| 4樓: | >>參與討論 |
| 作者: taoest 于 2006/5/2 20:34:00 發(fā)布:
是無(wú)聊 a+50超出了范圍,寫(xiě)代碼的時(shí)候就要考慮這些問(wèn)題,不能這么寫(xiě)。 如果硬要這么寫(xiě),那你就還是用匯編吧,高級(jí)語(yǔ)言不適合你。 |
|
| 5樓: | >>參與討論 |
| 作者: wuljia 于 2006/5/2 21:48:00 發(fā)布:
看來(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 于 2006/5/2 23:50:00 發(fā)布:
要看你的編譯器對(duì)常數(shù)的類型是怎么處理的 |
|
| 7樓: | >>參與討論 |
| 作者: wuljia 于 2006/5/3 8:23:00 發(fā)布:
編譯器是 Keil C 7.02 |
|
| 8樓: | >>參與討論 |
| 作者: gao8051 于 2006/5/3 12:49:00 發(fā)布:
垃圾 |
|
| 9樓: | >>參與討論 |
| 作者: hotpower 于 2006/5/3 12:55:00 發(fā)布:
我眩暈~~~if(b=a+50)永遠(yuǎn)為真,b=a+50本身就是44 |
|
| 10樓: | >>參與討論 |
| 作者: computer00 于 2006/5/3 13:02:00 發(fā)布:
哈哈~~~~倒過(guò)來(lái)寫(xiě)就沒(méi)那么容易犯錯(cuò)了~~~~~ if(a+50==b)....... |
|
| 11樓: | >>參與討論 |
| 作者: cf100 于 2006/5/3 14:03:00 發(fā)布:
不確定因素的引入,本來(lái)就是不成熟的表現(xiàn) c=a+50; if(b==c) 這樣就沒(méi)歧義。 |
|
| 12樓: | >>參與討論 |
| 作者: hunao 于 2006/5/3 21:58:00 發(fā)布:
寫(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 于 2006/5/3 23:18:00 發(fā)布:
好呢!定義不明確 |
|
| 14樓: | >>參與討論 |
| 作者: wuljia 于 2006/5/3 23:22:00 發(fā)布:
哈哈,樓上的,請(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 于 2006/5/4 0:07:00 發(fā)布:
按照 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 于 2006/5/4 0:15:00 發(fā)布:
哈哈 圈圈說(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 于 2006/5/4 2:40:00 發(fā)布:
跟你編譯器的設(shè)置有關(guān)。 如果你勾上下圖中紅色圈中的選項(xiàng),那么就會(huì)擴(kuò)展成16bit的整數(shù)來(lái)計(jì)算,那當(dāng)然是不相等的了。 如果不勾上,就當(dāng)作8bit的來(lái)算,那就是相等的了。
|
|
| 18樓: | >>參與討論 |
| 作者: hunao 于 2006/5/4 4:41:00 發(fā)布:
這個(gè)選項(xiàng)編譯器默認(rèn)是選中的 |
|
| 19樓: | >>參與討論 |
| 作者: computer00 于 2006/5/4 8:35:00 發(fā)布:
所以嘛,還是老老實(shí)實(shí)的寫(xiě)程序,最好不要依賴編譯器 |
|
| 20樓: | >>參與討論 |
| 作者: wuljia 于 2006/5/4 8:50:00 發(fā)布:
呵呵 圈圈的是正解啦 |
|
| 21樓: | >>參與討論 |
| 作者: 王紫豪 于 2006/5/4 14:30:00 發(fā)布:
這些跟編譯器、平臺(tái)都有關(guān)系,建議大家編程序不要“冒險(xiǎn)”。 |
|
| 22樓: | >>參與討論 |
| 作者: hunao 于 2006/5/4 15:09:00 發(fā)布:
要感謝樓主讓我知道了我在概念上的問(wèn)題。我有點(diǎn)想當(dāng)然了,慚愧。 |
|
| 23樓: | >>參與討論 |
| 作者: dai_weis 于 2006/5/4 21:28:00 發(fā)布:
同意圈圈的老老實(shí)實(shí)寫(xiě)程序,還有不要吝嗇括號(hào)的使用。 |
|
|
|
| 免費(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) |