以下所有操作符都是基于二進制進行的操作符
移位操作符
左移操作符 <<
移位規則
将整型數字的二進制補碼向左移動。左邊抛棄,右邊補0;
使用
例如:
int a =5;
int b = a << 1;
10的二進制補碼為00000000000000000000000000001010,将10的二進制補碼向左移動一位,右端不上一0,左端0由于超出32個比特位,是以抛棄。

而第二行由于整個二進制序列往左移動了一位,b的值變成了10:
難點重點和小知識點
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
右移操作符 >>
移位規則
右移運算分兩種:
-
邏輯移位
左邊用0填充,右邊丢棄
-
算術移位
左邊用原該值的符号位填充,右邊丢棄
使用
算術右移
如:
int num = -1 >> 1;
-1的補碼為:
邏輯右移
如:
int num = -1 >> 1;
-1的補碼為:
位操作符
按位與 &
2個整形的補碼,對應的二進制位都為1,則為1,若對應的二進制位數字不同,則位0。如:
按位或 |
2個整形的補碼,對應的二進制位一個為1,則為1,若對應的二進制位數字都為0,則位0。如:
按位異或 ^
兩個整形的補碼,對應的二進制位相同則為0,相異為1,如:
int a = 5;
1.a ^ a = 0;
2.0 ^ a = a;