提醒
首先你要明確一點,所謂的位運算。是相對與二進制而言。如: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
爲-1
。111111111111111111111111110
爲-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 補齊。