明明白白 Java 位運算

提醒

首先你要明確一點,所謂的位運算。是相對與二進制而言。如:3 ^ 2。就是 0011 和 0010 之間的計算。

^ 位運算符

public class Hello{
  public static void String(String str[]){
    System.out.println(2 ^ 3);
  }
}
// 輸出 1 

解釋:前面我們提過位運算是針對二進制而言的。以下是 2、3 轉換爲二進制
2 -------> 0010
3 -------> 0011
生成 – > 0001
^ 位運算符計算原則,相同則結果爲 0,不同則結果爲 1

& 位運算符

public class Hello{
  public static void String(String str[]){
    System.out.println(2 & 4);
  }
}
// 輸出 0 

解釋:
2 -------> 0010
4 -------> 0100
生成 – > 0000
& 位運算符計算原則,相同爲都爲 1,結果才爲1,否則結果爲0

| 位運算符

public class Hello{
  public static void String(String str[]){
    System.out.println(2 | 4);
  }
}
// 輸出 6 

解釋:
2 -------> 0010
4 -------> 0100
生成 – > 0110
| 位運算符計算原則,兩個位只要有一個爲1,那麼結果就是 1,否則就爲 0

~ 位運算符

public class Hello{
  public static void String(String str[]){
    System.out.println( ~ 4);
  }
}
// 輸出 -5

解釋:
4 -------> 00000000000000000000100
生成 – > 111111111111111111111111011
~ 位運算符計算原則,如果位爲0,結果是1,如果位爲1,結果是0

需要注意的是:在 Java 中數字類型並不會佔光所以的位,Java 會留出一位給負數使用。
如:int 的正數範圍只會佔用 31 位。而一個 32 位的 int 值,代表負數。其中 111111111111111111111111111-1111111111111111111111111110-2 。依次類推。

>> << >>> 位運算符

public class Hello{
  public static void String(String str[]){
         // Integer.toBinaryString() 方法會將 10 進制轉換爲 2 進制
        System.out.println((4 >> 2) + " ---> " + Integer.toBinaryString(4 >> 2));
        System.out.println((-4 >> 2) + "---> " + Integer.toBinaryString(-4 >> 2));
        
        System.out.println((4 << 2) + " ---> " + Integer.toBinaryString(4 << 2));
        System.out.println((-4 << 2) + " ---> " + Integer.toBinaryString(-4 << 2));
        
        System.out.println((4 >>> 2) + " ---> " + java.lang.Integer.toBinaryString(4 >>> 2));
        System.out.println((-4 >>> 2) + " ---> " + java.lang.Integer.toBinaryString(-4 >>> 2));


  }
}
// 輸出
// 1  ---> 0001
// -1 ---> 11111111111111111111111111111111

// 16 --->  00010000
// -16 ---> 11111111111111111111111111110000

// 1 --->          0001
// 1073741823 ---> 111111111111111111111111111111

解釋:
4 -------> 0100

>> 位運算符計算原則,首先判斷正負。如果是正數低位剔除,高位用 0 補齊。如:4 >> 2:數字 4 整體向低位移動 2 位。100 轉變爲 001。如果是負數,低位剔除,高位用 1 補齊。
<< 向高位移動,低位用 0 補齊。
>>> 向低位移動,高位統一用 0 補齊。


擴展內容
github
個人博客

發佈了30 篇原創文章 · 獲贊 7 · 訪問量 3286
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章