使用位運算符時首先將要進行運算的數轉換爲二進制,而後對二進制數值中的每一位進行計算,最後將得出的二進制數轉換爲相應類型的數值結果優化
與運算規則spa
0 & 0 = 0 0 & 1 = 0 1 & 1 = 1
與門邏輯電路,輸入端均爲高電平(邏輯1)時,輸出才爲高電平,不然爲低電平(邏輯0)3d
例:code
3 & 5
轉換爲二進制blog
0000 0011 & 0000 0101
從最低位到最高位一一對應進行運算,得出結果get
0000 0001
所以it
3 & 5 = 1
或運算規則二進制
0 | 0 = 0 0 | 1 = 1 1 | 1 = 1
或門邏輯電路,輸入端A或輸入端B爲高電平(邏輯1)時,輸出爲高電平(邏輯1)im
例:db
4 | 7
轉換爲二進制
0000 0100 | 0000 0111
從最低位到最高位一一對應進行運算,得出結果
0000 0111
所以
4 | 7 = 7
異或運算規則,位數值相同則爲0,不一樣則爲1
0 ^ 0 = 0 0 ^ 1 = 1 1 ^ 1 = 0
異或門邏輯電路
例:
5 ^ 9
轉換爲二進制
0000 0101 ^ 0000 1001
從最低位到最高位一一對應進行運算,得出結果
0000 1100
所以
5 ^ 9 = 12
取反運算規則,對操做數的每一位進行取反操做,0取反爲1,1取反爲0
~0 = 1 ~1 = 0
例:
~7
轉換爲二進制
0000 0111 ~
對每一位進行取反運算,得出結果
1111 1000
5. << 左移運算符
運算規則:將操做數的各二進制位左移若干,右補0,左溢出位捨棄
例
15轉換爲二進制00001111,左移兩位
00001111 << 2
結果爲
00111100
在數字沒有溢出的前提下,對於正數和負數,左移一位都至關於乘以2的1次方,左移n位就至關於乘以2的n次方。由於位運算比x運算快,能夠使用位運算對代碼進行優化
6. >>> 右移運算符
將二進制位向右移若干,右溢出位捨棄,高位補0
例如 16,二進制爲00010000,右移兩位
00010000 >>> 2
運算結果爲 00000100,即16/(2*2) = 4
7. >> 帶符號的右移運算符
對於正數的運算>>與>>>效果是同樣的,右移高位補0。可是對於負數,>> 是在高位補1
例16與-16
00010000 >> 2 = 00000100 11101111 >> 2 = 11111011