以下是Java位操作符的小總結,具體如下:
二進制負數以它正值的補碼形式表達
補碼:反碼+1等於補碼
比如:System.out.println(Integer.toBinaryString(-5));
打印:1111 1111 1111 1111 1111 1111 1111 1011 不用想了肯定是32位
過程是這樣的:
一個負數,比如-5,它的二進制在Java裡面是這樣表示
1000 0000 0000 0000 0000 0000 0000 0101
它的正值是:
0000 0000 0000 0000 0000 0000 0000 0101
反碼是:
1111 1111 1111 1111 1111 1111 1111 1010
再加上1是:
1111 1111 1111 1111 1111 1111 1111 1011
即得到打印的內容
Java ~ 操作符,對每個二進制位的內容求反,即1變成0,0變成1
測試負數:
int a = -5;//101;
System.out.println(~a);
打印:4
過程是這樣的,首先表示出來這個負數
1111 1111 1111 1111 1111 1111 1111 1011(上面已經提到為什麼這樣表示)
各位取反得到
0000 0000 0000 0000 0000 0000 0000 0100
轉為10進制得到4
測試正數:
int a = 5;//101;
System.out.println(~a);
打印:-6
首先表示出來這個正數:
0000 0000 0000 0000 0000 0000 0000 0101
各位取反得到:
1111 1111 1111 1111 1111 1111 1111 1010
這個代表的就是-6了,至於為什麼看最上面
Java & 操作符,對應的二進制位進行與操作,兩個都為1才為1,其他情況均為0
測試:
System.out.println(5&6);
打印:4
過程:
5表示成:0000 0000 0000 0000 0000 0000 0000 0101
6表示成:0000 0000 0000 0000 0000 0000 0000 0110
進行 & :0000 0000 0000 0000 0000 0000 0000 0100
得到:4
Java | 操作符,對應的二進制位進行或操作,兩個都為0才為0,其他情況均為1
測試:
System.out.println(5|6);
打印:7
過程:
5表示成:0000 0000 0000 0000 0000 0000 0000 0101
6表示成:0000 0000 0000 0000 0000 0000 0000 0110
進行 | :0000 0000 0000 0000 0000 0000 0000 0111
得到:7
Java ^ 操作符 當對應二進制位值相同,該位為0 否則為1
測試:
System.out.println(5^6);
打印:3
過程:
5表示成:0000 0000 0000 0000 0000 0000 0000 0101
6表示成:0000 0000 0000 0000 0000 0000 0000 0110
進行 ^ :0000 0000 0000 0000 0000 0000 0000 0011
得到:3
Java 《《 操作符,左邊移動,右面填充0
測試:
System.out.println(5《《1);
打印:10
5表示成:0000 0000 0000 0000 0000 0000 0000 0101
進行 《《1 操作:0000 0000 0000 0000 0000 0000 0000 1010
Java 》》 操作符,左邊移動,右面填充0
測試:
System.out.println(5》》》1);
打印:2
5表示成:0000 0000 0000 0000 0000 0000 0000 0101
進行 》》》1 操作:0000 0000 0000 0000 0000 0000 0000 0010
左移動一位相當乘以2 右移動一位相當處以2