左移:丟棄最高位,往左移位,右邊空出來的位置補0右移:右移有邏輯右移和算數右移
邏輯右移:丟棄最低位,向右移位,左邊空出來的位置補0
算數右移:丟棄最低位,向右移位,左邊空出來的位置補原來的符號位(即補最高位)
int a =1;
unsigned
int b =
(a <<31)
>>
31;
整型a:0000 0000 0000 0000 0000 0000 0000 0001
左移31位後:10000000 00000000 00000000 00000000 最右側直接補0
右移31位後: 11111111 11111111 11111111 11111111 a是有符號數,採用算術右移,最左側補符號位,即1
最終b等於0xffffffff
unsigned
int a =1;
unsigned
int b =
(a <<31)
>>
31;
整型a: 00000000 00000000 00000000 00000001
左移31位後:10000000 00000000 00000000 00000000 最右側直接補0
右移31位後:00000000 00000000 00000000 00000001 a是無符號數,採用邏輯右移,最左側補0
unsigned
int a =1;
unsigned
int b = a <<
33;
實際移動位數為 33 % 32 = 1,即左移1位,b = 2
參考文章:
02 算術左移邏輯左移,算術右移邏輯右移
算 術左移和邏輯左移一樣都是右邊補0 比如 00101011 算術左移一位 01010110 邏輯左移一位 01010110 對於二進位制的數值來說左移n位等於原來的數值乘以2的n次方 比如00011010十進位制是26,左移兩位後是011010 00轉成十進位制是104恰好是26的4倍。ps 這種...
移位操作 邏輯左移 邏輯右移 算術右移
常常會混淆移位操作的概念,因此在這裡記錄下測試程式。public class main 關於二進位制數加減法 原碼 反碼 補碼 正數 原碼就是原始數值的二進位制表示形式,最高位符號位是0 反碼是原碼的按位置取反 補碼是反碼的基礎上 1 負數 原碼就是最高位為1的表示形式 反碼是最高位的符號位不變,其...
C語言左移右移
記錄一下今天的收貨。看下面乙個程式 unit16 t index unit32 t ucrxmsgdata 4 unit16 t data0 canaregs.can if2data.bit.data 0 提取標誌位 if data0 0x7e 判斷標誌位 7e unit32 t result 0 ...