1. “>>”
int x = 16; printf("%d\n", x >> 1);
先將x轉成二進制 10000
, 不讀最后一位, 輸出 1000
, 即為8
;
右移一位相當於數值除以2
2. “<<”
int x = 16; printf("%d\n", x << 1);
先將x轉成二進制 10000
, 往最后再讀取一位(0, 或根據是否已經有移位), 輸出 100000
, 即為32
;
左移,若移動位數K等於或大於數據長度N,通常只移動K mod N 位數
左移一位相當於數值乘以2
3.注意
以上不包含溢出情況, 且只有能用在int、short int、long int,可能有錯漏。
溢出判斷:
- 正溢出:正數相加,結果為負數
- 負溢出:負數相加,結果為正數
4.結論
c語言中"<<"與">>" 被稱為整數的位移運算,位移是以“位(bit簡寫為b)”為單位將數據向左或向右的移動。 (8b = 1B)
5.測試
#include <stdio.h>
int main()
{
int x = 16;
printf("%d\n", x >> 3);
printf("%d\n", x >> 2);
printf("%d\n", x >> 1);
printf("%d\n", x << 3);
printf("%d\n", x << 2);
printf("%d\n", x << 1);
}
結果為
2
4
8
128
64
32