較為復(fù)雜の位運(yùn)算符:
''<<'':左移 左邊最高位丟棄,右邊補(bǔ)齊0
'>>':右移 最高位是0,左邊補(bǔ)齊0;最高為是1,左邊補(bǔ)齊1
'>>>':無符號右移 無論最高位是0還是1,左邊補(bǔ)齊0
舉例:
class OperatorDemo3 {
public static void main(String[] args) {
System.out.println(3 << 2);
System.out.println(-24 >> 2);
System.out.println(-24 >>> 2);
}
}
3 << 2:
計(jì)算出3的二進(jìn)制:11
00000000 00000000 00000000 00000011
000000 00000000 00000000 0000001100
結(jié)果:12
-24 >> 2:
計(jì)算出24的二進(jìn)制:11000
原碼:10000000 00000000 00000000 00011000
反碼:11111111 11111111 11111111 11100111
補(bǔ)碼:11111111 11111111 11111111 11101000
補(bǔ)碼的運(yùn)算:
11111111 11111111 11111111 11101000
11111111 11111111 11111111 11111010(00)
補(bǔ)碼:1111111111 11111111 11111111 111010
反碼:1111111111 11111111 11111111 111001
原碼:1000000000 00000000 00000000 000110
結(jié)果:-6
-24 >>> 2:
計(jì)算出24的二進(jìn)制:11000
原碼:10000000 00000000 00000000 00011000
反碼:11111111 11111111 11111111 11100111
補(bǔ)碼:11111111 11111111 11111111 11101000
11111111 11111111 11111111 11101000
0011111111 11111111 11111111 111010(00)
結(jié)果:1073741818
內(nèi)存中的所有運(yùn)算,都要換成補(bǔ)碼運(yùn)算,正數(shù)的補(bǔ)碼和原碼一致,但負(fù)數(shù)的補(bǔ)碼與原碼大相庭徑!需注意。
面試題:
請用最有效率的方式寫出計(jì)算2乘以8的結(jié)果?
2 × 8 = 2 × 2^3
2 << 3
舉一反三:任何數(shù)乘以2的n次方,都可以用左移運(yùn)算符來快速計(jì)算。
3 × 64 = 3 × 2^6
3 << 6
.
.