- << 表示左移,不分正負數,低位補0
- >> 表示右移,如果該數為正,則高位補0,若為負數,則高位補1
- >>> 表示無符號右移,也叫邏輯右移,即若該數為正,則高位補0,而若該數為負數,則右移后高位同樣補0
測試代碼:
System.out.println("16 <<1 : " + (16 <<1)); System.out.println("16 >> 3 : " + (16 >> 3)); System.out.println("16 >> 10 : " + (16 >> 10)); System.out.println("1 >> 1 : " + (1 >> 1)); System.out.println("16 >>> 2 : " + (16 >>> 2)); System.out.println("-16 >> 2 : " + (-16 >> 2)); System.out.println("-16 <<2 : " + (-16 <<2)); System.out.println("-16 >>> 2 : " + (-16 >>> 2));
打印結果:
16 <<1 : 32 16 >> 3 : 2 16 >> 10 : 0 1 >> 1 : 0 16 >>> 2 : 4 -16 >> 2 : -4 -16 <<2 : -64 -16 >>> 2 : 1073741820
簡單理解:
- <<1 相當於乘以2
- >> 1 相當於除以2
- >>> 不考慮高位的正負號,正數的 >>> 等同於 >>
PS:位移操作涉及二進制、原碼、補碼、反碼相關,可參考: