關於移位操作

2021-06-01 18:53:42 字數 504 閱讀 7877

左移:不管是有符號數還是無符號數,數字都往左移動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。

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

關於C移位操作

在x86 64平台上,下面這段 輸出的結果是否相同?include include int main int argc,char ar 輸出結果 r0 144115188075855872,r1 33554432 原因 相關彙編 0000000000400530 400530 55 push rbp...

巧用移位操作

移位規則 移位時,移出的位數全部丟棄,移出的空位補入的數與左移還是右移有關。如果是左移,則規定補入的數全部是0 如果是右移,還與被移位的資料是否帶符號有關。若是不帶符號數,則補入的數全部為0 若是帶符號數,則補入的數全部等於原數的最左端位上的原數 即原符號位 具體移位規則如下所示。位移位運算子的優先...

關於移位操作的一點說明

我們有下面的測試 對於正數的移位操作 7的二進位製碼為0111 當左移2位時 右邊補0 11100 十進位制28 當右移2位時 左邊補0 001 十進位制1 7的二進位製碼1111 當左移兩位時 111100 最高位為符號位 十進位制 28 當右移1位時 二進位製碼為1111 取反加一為補碼 100...