天天看點

C語言操作符 移位操作符 位操作符 運算 難點 重點

以下所有操作符都是基于二進制進行的操作符

移位操作符

左移操作符 <<

移位規則

将整型數字的二進制補碼向左移動。左邊抛棄,右邊補0;

使用

例如:

int a =5;
int b = a << 1;      

10的二進制補碼為00000000000000000000000000001010,将10的二進制補碼向左移動一位,右端不上一0,左端0由于超出32個比特位,是以抛棄。

C語言操作符 移位操作符 位操作符 運算 難點 重點

而第二行由于整個二進制序列往左移動了一位,b的值變成了10:

C語言操作符 移位操作符 位操作符 運算 難點 重點

難點重點和小知識點

1.那麼,為什麼a的值沒有變化呢?

看這個語句,我們可以很明顯地得到答案:移位運算符不是指派運算符,不能給變量指派,變量在沒有被指派的情況下本身的值是不變的。

使用移位運算符和使用算術運算符是類似的。

int x= y+2;      

2.左移操作符有乘2的效果

如代碼:

int a = 5;
int b = a << 1; //即b = a * 2^1
int x = 12;
int y = x << 3 ; //即 y = x * 2 ^ 3      

右移操作符 >>

移位規則

右移運算分兩種:

  1. 邏輯移位

    左邊用0填充,右邊丢棄

  2. 算術移位

    左邊用原該值的符号位填充,右邊丢棄

使用

算術右移

如:

int num = -1 >> 1;      

-1的補碼為:

C語言操作符 移位操作符 位操作符 運算 難點 重點
C語言操作符 移位操作符 位操作符 運算 難點 重點
邏輯右移

如:

int num = -1 >> 1;      

-1的補碼為:

C語言操作符 移位操作符 位操作符 運算 難點 重點
C語言操作符 移位操作符 位操作符 運算 難點 重點

位操作符

按位與 &

2個整形的補碼,對應的二進制位都為1,則為1,若對應的二進制位數字不同,則位0。如:

C語言操作符 移位操作符 位操作符 運算 難點 重點

按位或 |

2個整形的補碼,對應的二進制位一個為1,則為1,若對應的二進制位數字都為0,則位0。如:

C語言操作符 移位操作符 位操作符 運算 難點 重點

按位異或 ^

兩個整形的補碼,對應的二進制位相同則為0,相異為1,如:

int a = 5;
1.a ^ a = 0;
2.0 ^ a = a;      

繼續閱讀