位移有左位移,右位移,无符号位移;
<<: 表示左移,将操作数的二进制码整体指定位数,左移之后的空使用 0 来补充
例如:System.out.println(2<<3); //16
2的二进制 :
00000000 00000000 00000000 00000010
左移3位
00000000 00000000 00000000 00010000
>>: 表示右移,将操作的数整体右移指定位数,右移之后的空使用 ‘符号位’来补充
若是正数则用 0 补充,若是负数则用 1 来补充(取反,求补);
例如:System.out.println(-16 >> 3);// -2
-16的二进制:
原码:10000000 00000000 00000000 000010000
反码:11111111 11111111 11111111 111101111
补码:11111111 11111111 11111111 111110000 (右边第一位加1)
>>>: 无符号右移,将操作的二进制码整体右移指定位数,右移后的空位用 0 来补充