易混淆知识点:Java有符号和无符号位运算
-
>>
是带符号右移,转换成2进制右移时,正数左边补0,负数左边补1; -
>>>
是无符号右移,转换成2进制右移时,左边补0.
举例:
- 正数>>和>>>的结果一样,如:8>>1和8>>>1,:
8转换成32位的2进制数,也就是… 0000 1000,省略前面的0;右移1位,也就是0000 0100,转换成10进制结果是4; - 负数>>>和结果就不相同了,-8>>和-8>>>1:
-8转换成32位的2进制数,也就是… 1111 1000,省略前面的1;
- 带符号>>右移1位,也就是1111 … 1100,转换成10进制结果是-4;
- 无符号>>>右移1位,也就是0111 … 1100,转换成10进制结果是2147483644.
测试代码如下:
//Java带符号位运算>>和无符号位运算>>>
int a = -8 >> 1;
int b = -8 >>> 1;
System.out.println("带符号位运算-8>>1运算结果:" + a + "\n" + "无符号右移-8>>>1运算结果:" + b + "\n");
打印结果:
带符号位运算-8>>1运算结果:-4
无符号右移-8>>>1运算结果:2147483644