代码:
byte b = (byte)(-8 >>> 2);
System.out.println(b);
你们觉得结果是多少呢?结果是:
-2
一开始觉得,明明>>>是无符号右移,首位肯定是0啊,所以是正数啊,怎么会是一个负数呢?后来推了一边终于明白了。原因是忽略了-8和2默认都是int类型。接下来,推导一边。
-8对应的二进制为:1000 0000 0000 0000 0000 0000 0000 1000
转换为补码:1111 1111 1111 1111 1111 1111 1111 1000
>>>2操作:0011 1111 1111 1111 1111 1111 1111 1110
(byte)操作:1111 1110
转换为原码:1000 0010
转换为10进制:-2