C語言 左移 右移 邏輯右移 算數右移

2021-10-08 07:45:46 字數 909 閱讀 3810

左移:丟棄最高位,往左移位,右邊空出來的位置補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 ...