欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: Keil調試功能有BUG? [打印本頁]

作者: 星水天河    時間: 2020-6-15 19:28
標題: Keil調試功能有BUG?
本帖最后由 星水天河 于 2020-6-15 19:29 編輯

例如執行i=0xA2FC%10;得到的是0x04。這個結果是正確的。(0xA2FC=41724)
但是語句remainder=quotient%10;(quotient變量當前的值為0xA2FC,為int型變量;remainder為unsigned char型變量)
執行后,在Watch窗口看到的remainder的值為0xFE? (這個問號是Watch窗口中remainder變量的值這一欄中就有的)
即便我進行強制類型轉換remainder=(unsigned char)quotient%10;得到的結果為0x02,也和0x04的正確結果完全不符合。這是怎么回事?

圖片3.jpg (2.34 KB, 下載次數: 79)

圖片3.jpg

圖片1.jpg (10.18 KB, 下載次數: 91)

圖片1.jpg

作者: 黃youhui    時間: 2020-6-16 08:47
remainder=(unsigned char)(quotient%10)
作者: 星水天河    時間: 2020-6-16 12:27
黃youhui 發表于 2020-6-16 08:47
remainder=(unsigned char)(quotient%10)

改成這樣之后在Watch窗口看到的remainder的值還是0xFE'?  請問這是怎么回事。。
作者: carpcarey    時間: 2020-6-16 13:41
i是unsigned int =0xA2FC=41724    i%10的結果也是和i類型一樣  所以是4
quotient是int =0xA2FC=-23812 所以%10后得到的是-2  FFFE(quotient%10的結果也是和quotient的類型一樣是int型),然后賦值給unsigned char型的remainder,那remainder=0xFE
remainder=(unsigned char)quotient%10的話,quotient=0xA2FC;(unsigned char)quotient=0xFC;
0xFC%10=252%10=2.
所以正確做法應該這樣:
remainder=(unsigned int)quotient%10;
先把quotient強制轉換成unsigned int型,這時quotient%10的結果也是unsigned int型。得到0x0004,再賦值給remainder就是0x04
作者: 黃youhui    時間: 2020-6-16 13:46
星水天河 發表于 2020-6-16 12:27
改成這樣之后在Watch窗口看到的remainder的值還是0xFE'?  請問這是怎么回事。。

單步執行看看吧,我這沒問題

2.png (74.04 KB, 下載次數: 65)

2.png

作者: yzwzfyz    時間: 2020-6-16 15:19
INT 的最大值是多少?
有負的INT嗎?

作者: wufeng391    時間: 2020-6-17 21:43
remainder=(unsigned char)quotient%10
quotient=0xA2FC=41724
(unsigned char)quotient=0xFC,這沒有什么問題吧
0xFC=252,這也沒有問題吧
那么252對10取余等于2有什么問題么?

作者: 星水天河    時間: 2020-6-21 07:13
carpcarey 發表于 2020-6-16 13:41
i是unsigned int =0xA2FC=41724    i%10的結果也是和i類型一樣  所以是4
quotient是int =0xA2FC=-23812 所 ...

你的回答是對的。感謝!還有一個問題是上面的截圖里remainder=0XFE‘?這個'?是什么意思?




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1