最近又看了下位運算符的內容,本身再次消化後,決定仍是記錄下來,萬一之後再忘了直接看本身的,省的再滿世界的去找了。。。spa
我本身瞭解到的按位運算符有6個,分別是:io
一、&(按位與):任何二進制位與0進行 & 計算,結果都是0;和1進行&計算,結果是原值。即:二進制位都是1時,進行 & 計算結果是1,其餘狀況計算結果都是0二進制
如:6的二進制是:000110,5的二進制是:000101,6 & 5 = 000110 & 000101 = 000100 = 4移動
二、|(按位或):任何二進制位與0進行 | 計算,結果是原值;和1進行 | 計算,結果都是1。即:二進制位都是0時,進行 | 計算結果是0,其餘狀況計算結果都是1co
如:6的二進制是:000110,5的二進制是:000101,6 | 5 = 000110 | 000101 = 000111 = 7background
三、^(按位異或):任何相同的二進制位進行 ^ 計算,結果是0;不相同的二進制位進行 ^ 計算,結果是1。位運算
如:6的二進制是:000110,5的二進制是:000101,6 ^ 5 = 000110 ^ 000101 = 000011 = 3運算符
四、>>(右移):二進制從低位進行移除並將剩餘的向右移動,原先最高位是1補1,是0補0,其它空位補0。右移n位,實現效果等同於除以2的n冪次方
如:8的二進制是:001000,8 ÷ 23 = 8 >> 3 = 001000 = 000001 = 1
五、<<(左移): 二進制從高位進行移除並將剩餘的向左移動,原先最高位是1補1,是0補0,其它空位補0。左移n位,實現效果等同於乘以2的n冪次方
如:8的二進制是:001000,1 × 23 = 1 << 3 = 000001 = 001000 = 8
六、>>>(無符號右移):二進制從低位進行移除並向右移動,無論原先最高位是1仍是0,和其它空位同樣補0。對於正數,無符號右移等同於右移,可是若是仍是負數進行無符號右移,會出現計算問題。由於二進制最高位是做爲符號位來保存的,正數最高位爲0,負數最高位爲1,並且負數的二進制計算和正數的二進制計算是相反的(即-1的二進制位數值都是1),你品品,你細品。
如:int類型(32位)-1的二進制是:11111111111111111111111111111111,-1 >>> 1 = 11111111111111111111111111111111 = 01111111111111111111111111111111 = 231 - 1 = 2147483647,
int類型的(32位)-2的二進制是:11111111111111111111111111111110,-2 >>> 1 = 11111111111111111111111111111110 = 01111111111111111111111111111111 = 231 - 1 = 2147483647
int類型的(32位)-3的二進制是:11111111111111111111111111111101,-3 >>> 1 = 11111111111111111111111111111101 = 01111111111111111111111111111110 = 230 = 2147483646
七、~(按位非):二進制位進行非運算(~),位是1的結果爲0,位是0的結果爲1
如:int類型(32位)-1的二進制是:11111111111111111111111111111111,~-1 = ~(11111111111111111111111111111111) = 0000000000000000000000000000 = 0
int類型(32位)1的二進制是:00000000000000000000000000000001,~1 = ~(00000000000000000000000000000001) = 11111111111111111111111111111110= -2