java的位運算子的理解和使用
阿新 • • 發佈:2018-12-19
常見的位運算子如下圖:
具體規則如下
第一部分:
- &----有0則0
- |------有1則1
- ^-----相同為0,不同為1
- ~-----0變1,1變0
// 分析 先把資料轉換為二進位制 // 3的二進位制 11,補碼 00000000 00000000 00000000 00000011 // 4的二進位制100,補碼 00000000 00000000 00000000 00000100 int a=3; int b=4; System.out.println(3&4); //0----有0則0 System.out.println(3|4); //111-----7 有1則1 System.out.println(3^4); //111------7 相同為0,不同為1 System.out.println(~3); //-4 0變1,1變0 // 補碼:11111111 11111111 11111111 11111100 // 反碼:11111111 11111111 11111111 11111011 // 原碼:10000000 00000000 00000000 00000100
第二部分:
- 一個數據被位運算(^)倆次,其結果不變
System.out.println(3^4^4); //3 System.out.println(4^3^3); //4
- 把<<左邊的資料向左移幾位,相等於左邊的資料乘以2的移動次冪
System.out.println(3<<2); // 3*2^2=12 /* <<左移 計算3的二進位制:11 00000000 00000000 00000000 00000011 (00) 00000000 00000000 00000000 00001100 */
- 把>>左邊的資料右移幾位,相等於左邊的資料除以2的移動次冪
System.out.println(-4>>2); //-4/2^2=-1 /* 計算出4的二進位制:0100 原碼:10000000 00000000 00000000 0000100 反碼:11111111 11111111 11111111 1111011 補碼:11111111 11111111 11111111 1111100 11111111 11111111 11111111 11111111(00) 補碼 補碼:11111111 11111111 11111111 11111111 反碼:11111111 11111111 11111111 11111110 原碼:10000000 00000000 00000000 00000001 結果:-1 */
-
>>>(無符號右移)------無論最高位是0還是1,左邊補齊0
System.out.println(-4>>>2); /* 計算出4的二進位制:0100 原碼:10000000 00000000 00000000 0000100 反碼:11111111 11111111 11111111 1111011 補碼:11111111 11111111 11111111 1111100 0011111111 11111111 11111111 11111(00) 結果:1073741823 */
注意:
- 首先把資料轉換為二進位制
- &,|,^當倆邊是資料做位運算,倆邊是布林值做邏輯運算