说了几个简单的位运算符,接下来看看稍微复杂点的另外三个吧:
<<:
将操作数的二进制码整体左移指定位数,左移之后的空使用‘0’来补充。刚接触这个所谓的“移位操作”,不一定能理解二进制码整体移动指定位数是什么意思,所以下面用代码直观地表示一下:
System.out.println(2 << 3);//表示2的二进制码整体左移3位,结果为16。2的二进制:00000000_00000000_00000000_00000010移位后的二进制:00000_00000000_00000000_00000010左移之后,右端缺少3位,使用‘0’来补充空位,结果如下:16的二进制:00000_00000000_00000000_00000010000
>>:
将操作数的二进制码整体右移指定位数,右移之后的空使用‘符号位’来补充。同样地也以代码来解释:
System.out.println(16 >> 3);//表示16的二进制代码整体右移3位,结果为2。16的二进制:00000_00000000_00000000_00000010000移位后的二进制:00000_00000000_00000000_00000010右移之后,左端缺少3位,使用符号位(正数为‘0’,负数为‘1’)来补充空位,结果如下:2的二进制:00000000_00000000_00000000_00000010
>>>:
将操作数的二进制码整体右移指定位数,右移之后的空位使用‘0’来补充(注意:没有“<<<”!!!)。这个操作其实和“>>”一样,只是无论操作的数为正或负,均使用‘0’来补充空位。
System.out.println(-16 >>> 3);//表示-16的二进制码整体右移3位,结果为536870910。-16的二进制:11111111_11111111_11111111_11110000移位后的二进制:11111111_11111111_11111111_11110右移三位之后,左端空缺三位,需要用‘0’来补充,结果如下:536870910的二进制:00011111111_11111111_11111111_11110