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

標題: C語言中Uint和int類型數據的移位操作 [打印本頁]

作者: jiege    時間: 2014-8-20 02:54
標題: C語言中Uint和int類型數據的移位操作
                                                                                                int i,j,m;
       i = 0x00CF;
       j = 0xDE43;
       m = (i << 8) | (j >> 8);

執行后結果是?
       m = 0xFFDE,而不是0xCFDE。

看一下匯編后的指令:
MOV ACC, *-SP[6] << 8    ;ACC = 0x0000CF00
MOV AH, *-SP[5]    ;ACC = 0xDE43CF00
ASR AH,8    ;ACC = 0xFFDECF00
OR  AH, @AL    ;ACC = 0xFFDECF00
MOV *-SP[7], AH    ;m = 0xFFDE(返回值)

因為j是整型數,所以右移操作編譯后是帶符號的算術右移指令 ASR。
把j改為Uint后,右移操作編譯后是無符號擴展的邏輯右移指令 LSR。

如果希望得到m = 0xCFDE的結果,那么可以把i、j、m定義為無符號數:
Uint i,j,m;
       i = 0x00CF;
       j = 0xDE43;
       m = (i << 8) | (j >> 8);

看一下匯編后的指令:
MOV ACC, *-SP[6] << 8    ;ACC = 0x0000CF00
MOV AH, *-SP[5]    ;ACC = 0xDE43CF00
LSR AH,8    ;ACC = 0x00DECF00
OR  AH, @AL    ;ACC = 0xCFDECF00
MOV *-SP[7], AH    ;m = 0xCFDE(返回值)

注:MPU為TMS320F2812。






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