移位操作符
左移:<<
右移:>>
這裡的左移和右移指的是二進制左移和右移,比如:
int a=1;
a = a<<1;
過程為: 1的二進制是 00000000000000000000000000000001,二進制左移即最左邊的0去掉,最右邊補上一個0,如圖:

左移和右移遵循以下規則:
對于無符号整形
左移是邏輯左移,最右邊補0;右移是邏輯右移,最左邊補0。
對于有符号整形
左移仍是邏輯左移,最右邊補0;右移可能是邏輯右移也可能是算術右移,不過一般情況下是算術右移。
(算數右移、邏輯右移)
算術右移:即根據符号位來補,符号位是0,那麼補0;符号位是1,那麼補1。
例如:
int b=-2;
b=b>>1;
過程如圖:
-2的補碼是11111111111111111111111111111110,整體右移一位,最左邊補符号位1
注意事項
在代碼裡面直接進行移位操作,原本的數值是不變的,除非把移位後的值賦給原值。如下:
#include<stdio.h>
int main()
{
int a = -2;
a >> 1;
printf("%d\n", a);
a = a >> 1;
printf("%d", a);
return 0;
}
運作結果如圖:
不難看出,a直接進行右移,a沒有改變。
把a右移後的值賦給a,那麼a的值才是a右移後的值。