|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | 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 |
很簡單的KEILC 程序,高手指點(diǎn) |
| 作者:lseek 欄目:單片機(jī) |
下面的兩端程序,功能是一樣的,為什么運(yùn)行結(jié)果不同 #define OUTV_MAX 45 uint pressure(uint val) { uint AAAA; uint temp_data; AAAA=OUTV_MAX; //1 AAAA*=1023; //2 AAAA/=50; //3 AAAA=1023*OUTV_MAX/50; //4 } 正常來說程序執(zhí)行1,2,3之后的結(jié)果應(yīng)該與4執(zhí)行的結(jié)果是一樣的,可仿真的結(jié)果卻不通,實(shí)在搞不懂是怎么回事?還望大俠指教. |
| 2樓: | >>參與討論 |
| 作者: 莊莊 于 2006/1/9 17:07:00 發(fā)布:
看看反匯編的結(jié)果吧 可能是編譯器計(jì)算順序是由右到左 |
|
| 3樓: | >>參與討論 |
| 作者: lseek 于 2006/1/9 17:14:00 發(fā)布:
好像不是順序問題 1,2,3 執(zhí)行的結(jié)果是正確的,而4執(zhí)行的結(jié)果是不正確的. 4的反匯編代碼如下:
|
|
| 4樓: | >>參與討論 |
| 作者: 莊莊 于 2006/1/9 17:18:00 發(fā)布:
數(shù)據(jù)類型由整型改為長整型 |
|
| 5樓: | >>參與討論 |
| 作者: wswh2o 于 2006/1/9 17:22:00 發(fā)布:
uint 也沒有溢出吧? |
|
| 6樓: | >>參與討論 |
| 作者: lseek 于 2006/1/9 17:23:00 發(fā)布:
樓上 我試了,運(yùn)行結(jié)果是一樣的.只不過是有 FE7A 變成FFFFFE7A. AAAA 我定義的是無符號整型,不會溢出.正確的結(jié)果是0x398. 可是4式就是的不出正確結(jié)果.郁悶. * - 本貼最后修改時(shí)間:2006-1-9 17:26:42 修改者:lseek |
|
| 7樓: | >>參與討論 |
| 作者: 楊工 于 2006/1/9 18:42:00 發(fā)布:
少了1個(gè)L 改為AAAA=1023L*OUTV_MAX/50 |
|
| 8樓: | >>參與討論 |
| 作者: jinbos 于 2006/1/9 18:45:00 發(fā)布:
一般都是數(shù)據(jù)類型問題, |
|
| 9樓: | >>參與討論 |
| 作者: 艾森豪威爾 于 2006/1/10 10:58:00 發(fā)布:
AAAA=(uint)1023*(uint)OUTV_MAX/(uint)50;試一下 很明顯需要強(qiáng)制轉(zhuǎn)換 |
|
| 10樓: | >>參與討論 |
| 作者: lookuper 于 2006/1/10 11:47:00 發(fā)布:
因?yàn)?式,不是單片機(jī)計(jì)算的,是C編譯器編譯時(shí)算好的 所以 只需 AAAA=1023L*OUTV_MAX/50; //4 × 加L就好了 |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |