關於移位操作

左移:不管是有符號數還是無符號數,數位都往左移動n位,右邊用0補足。如果左移的位數超過整數本身的位數,結果不知道。VS上測試結果是從頭開始。

例子(VS,32位機器):

int類型,原始值0x1,左移31位後是0x80000000。左移32位後是0x1。原始值0x11,左移31位後是0x80000000,左移32位後是0x11。

unsigned int類型,同上。


右移:右移包括邏輯右移和算術右移。對於無符號數,只有邏輯右移,對於有符號數,可以邏輯右移,也可以算術右移,具體的實現因編譯器的不同而不同。

邏輯右移是在左端補0,算術右移是在左端補符號位,如果是正數就補0,如果是負數就補1。

在本機上做實驗,對於無符號數,採用算術右移。

例子:

unsigned int類型,原始值0x80000000,右移一次爲0x40000000。

int類型,原始值0x80000000,右移一次爲0xC0000000。

如果移位位數超過整數本身的位數,結果從頭開始。同左移。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章