要點:
<<:左移 左邊最高位丟棄,右邊補齊0
>>:右移 最高位是0,左邊補齊0;最高爲是1,左邊補齊1
>>>:無符號右移 無論最高位是0還是1,左邊補齊0
面試題:
請用最有效率的方式寫出計算2乘以8的結果?
2 * 8
2 << 3
代碼展示區:
class OperatorDemo3 {
public static void main(String[] args) {
//<< 把<<左邊的數據乘以2的移動次冪
System.out.println(3 << 2); //3*2^2 = 3*4 = 12;
//>> 把>>左邊的數據除以2的移動次冪
System.out.println(24 >> 2); //24 / 2^2 = 24 / 4 = 6
System.out.println(24 >>> 2);
System.out.println(-24 >> 2);
System.out.println(-24 >>> 2);
}
}
/*
計算出3的二進制:11
00000000 00000000 00000000 00000011
(00)000000 00000000 00000000 0000001100
>>的移動:
計算出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
*/