天天看點

c語言中的移位操作符

移位操作符

左移:<<

右移:>>

這裡的左移和右移指的是二進制左移和右移,比如:

int a=1;

a = a<<1;

過程為:  1的二進制是  00000000000000000000000000000001,二進制左移即最左邊的0去掉,最右邊補上一個0,如圖:

c語言中的移位操作符

左移和右移遵循以下規則:

對于無符号整形

左移是邏輯左移,最右邊補0;右移是邏輯右移,最左邊補0。

對于有符号整形

左移仍是邏輯左移,最右邊補0;右移可能是邏輯右移也可能是算術右移,不過一般情況下是算術右移。

(算數右移、邏輯右移)

算術右移:即根據符号位來補,符号位是0,那麼補0;符号位是1,那麼補1。

例如:

int b=-2;

b=b>>1;

過程如圖:

-2的補碼是11111111111111111111111111111110,整體右移一位,最左邊補符号位1

c語言中的移位操作符

注意事項

在代碼裡面直接進行移位操作,原本的數值是不變的,除非把移位後的值賦給原值。如下:

#include<stdio.h>
int main()
{
	int a = -2;
	a >> 1;
	printf("%d\n", a);

	a = a >> 1;
	printf("%d", a);
	return 0;
}
           

運作結果如圖:

c語言中的移位操作符

不難看出,a直接進行右移,a沒有改變。

把a右移後的值賦給a,那麼a的值才是a右移後的值。

繼續閱讀