|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
KEIL C51急救 |
| 作者:nylyt 欄目:單片機 |
小弟用的是KEIL 51 7.09版本,程序大部分完成,但涉及數(shù)學(xué)算法51出錯,我簡單測試 //#include <intrins.h> void main(void) {//unsigned int x, y; signed LONG z; z=(1000*500); //x=z/5000; }仿真觀察Z,為何是0xffffa120,而不是0x0007a120 |
| 2樓: | >>參與討論 |
| 作者: jingwang 于 2005/3/6 16:22:00 發(fā)布:
re 請查看數(shù)組變量int x的定義 |
|
| 3樓: | >>參與討論 |
| 作者: hiberhe 于 2005/3/6 16:44:00 發(fā)布:
z是signed的啦~ |
|
| 4樓: | >>參與討論 |
| 作者: nylyt 于 2005/3/6 16:53:00 發(fā)布:
不對 我的別的部分都正確,只為測試算法另建一工程,變量定以為字節(jié)和字計算結(jié)果都正確,但定以為LONG計算不對 |
|
| 5樓: | >>參與討論 |
| 作者: taoest 于 2005/3/6 22:35:00 發(fā)布:
用強制轉(zhuǎn)換 用強制轉(zhuǎn)換: z=((LONG)1000*(LONG)500); 因為1000 和500 都是INT ,乘起來也是 INT ,所以賦給Z的時候就只有INT |
|
| 6樓: | >>參與討論 |
| 作者: 32768Hz 于 2005/3/7 10:30:00 發(fā)布:
應(yīng)寫成 z=1000L*500L; |
|
| 7樓: | >>參與討論 |
| 作者: nylyt 于 2005/3/7 11:25:00 發(fā)布:
為什么定義為字節(jié)和字都對 謝謝32768HZ和TAOEST兩位,我過去常用匯編的第一次用C,不明白為什么定義成字都對呢?例如X=100*3,X定義為unsigned int類型常數(shù)不用強制轉(zhuǎn)換都正確,但定義成LONG就不對呢如X=10000*30 |
|
| 8樓: | >>參與討論 |
| 作者: computer00 于 2005/3/7 12:09:00 發(fā)布:
看你的計算結(jié)果是否超出范圍。溢出之后,當(dāng)然就錯了。 |
|
| 9樓: | >>參與討論 |
| 作者: nylyt 于 2005/3/7 14:36:00 發(fā)布:
請解惑 computer00應(yīng)該把上面的帖子看完,不存在溢出問題,而是兩個常數(shù)相乘如果我把變量定義為長整型后,乘積也沒溢出,結(jié)果不對。 |
|
| 10樓: | >>參與討論 |
| 作者: chenqinyao 于 2005/3/7 14:42:00 發(fā)布:
re 把 signed LONG z;改為unsigned LONG z;試試看! |
|
| 11樓: | >>參與討論 |
| 作者: computer00 于 2005/3/7 17:54:00 發(fā)布:
一個int的是16位,如果是無符號的,則表示最大的數(shù)為65535 而你現(xiàn)在是10000*30=300000>65535,這不是溢出,是什么? 你改成下面的就行了: X=10000; X*=30; 或者X=(LONG)10000*30; * - 本貼最后修改時間:2005-3-7 18:20:10 修改者:computer00 |
|
| 12樓: | >>參與討論 |
| 作者: nylyt 于 2005/3/8 19:14:00 發(fā)布:
LONG 是長整型沒有溢出 |
|
| 13樓: | >>參與討論 |
| 作者: computer00 于 2005/3/8 23:01:00 發(fā)布:
但是右邊溢出了 默認(rèn)10000是int型的,而30是CHAR型的,因此在做乘法運算時,按int來處理, 結(jié)果就溢出了,在賦值給LONG X之前,就已經(jīng)溢出了。 你還是自己寫個程序,慢慢看吧,最好反匯編后來看看,它是怎樣處理這兩個數(shù)相 乘的。 |
|
| 14樓: | >>參與討論 |
| 作者: mailbert 于 2005/3/10 12:10:00 發(fā)布:
寫成z=(0x3E8*0x1F4); 行嗎? |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |