找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6315|回復(fù): 0
收起左側(cè)

C語言中Uint和int類型數(shù)據(jù)的移位操作

[復(fù)制鏈接]
ID:51088 發(fā)表于 2014-8-20 02:54 | 顯示全部樓層 |閱讀模式
                                                                                                int i,j,m;
       i = 0x00CF;
       j = 0xDE43;
       m = (i << 8) | (j >> 8);

執(zhí)行后結(jié)果是?
       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是整型數(shù),所以右移操作編譯后是帶符號的算術(shù)右移指令 ASR。
把j改為Uint后,右移操作編譯后是無符號擴展的邏輯右移指令 LSR。

如果希望得到m = 0xCFDE的結(jié)果,那么可以把i、j、m定義為無符號數(shù):
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。

回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表