Java中byte类型使用无符号右移运算符(>>>)陷阱

代码:

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

猜你喜欢

转载自blog.csdn.net/qq_38006520/article/details/82667983