位運算子的"~"和">>"以及">>>"
阿新 • • 發佈:2018-12-03
位運算子 |
||
運算子 |
運算 |
範例 |
<< |
左移 |
3 << 2 = 12 --> 3*2*2=12 |
>> |
右移 |
3 >> 1 = 1 --> 3/2=1 |
>>> |
無符號右移 |
3 >>> 1 = 1 --> 3/2=1 |
& |
與運算 |
6 & 3 = 2 |
| |
或運算 |
6 | 3 = 7 |
^ |
異或運算 |
6 ^ 3 = 5 |
~ |
反碼 |
~6 = -7 |
~:反碼
class OperatorDemo { public static void main(String[] args) { int a = 3; System.out.println(~3);//-4 } }
~按位取反運算子:0變1,1變0
00000000 00000000 00000000 00000011
~11111111 11111111 11111111 11111100 (補碼)
補碼:11111111 11111111 11111111 11111100
反碼:11111111 11111111 11111111 11111011
原碼:10000000 00000000 00000000 00000100
結果是:-4
>>與>>>:右移與無符號右移
class OperatorDemo1 { public static void main(String[] args) { //>> 把>>左邊的資料除以2的移動次冪 System.out.println(24 >> 2); //24 / 2^2 = 24 / 4 = 6 System.out.println(24 >>> 2);//24 / 2^2 = 24 / 4 = 6 System.out.println(-24 >> 2); //-6 System.out.println(-24 >>> 2);//1073741818 } }
>>的移動:
計算出24的二進位制:11000
原碼:10000000 00000000 00000000 00011000
反碼:11111111 11111111 11111111 11100111
補碼:11111111 11111111 11111111 11101000
11111111 11111111 11111111 11101000
1111111111 11111111 11111111 111010(00) 補碼
補碼:1111111111 11111111 11111111 111010
反碼:1111111111 11111111 11111111 111001
原碼:1000000000 00000000 00000000 000110
結果:-6
>>>的移動:
計算出24的二進位制:11000
原碼:10000000 00000000 00000000 00011000
反碼:11111111 11111111 11111111 11100111
補碼:11111111 11111111 11111111 11101000
11111111 11111111 11111111 11101000
0011111111 11111111 11111111 111010(00)
結果:1073741818