【发布时间】:2015-10-19 16:39:50
【问题描述】:
考虑以下 Java 代码:
byte a = (byte) 0b01111110; //Binary Literal
byte b1 = (byte) (a << 1);
byte c1 = (byte) (a >> 1);
byte b2 = (byte) (b1 >> 1);
byte c2 = (byte) (c1 << 1);
System.out.println("A:" + a + " B1:" + b1 + " C1:" + c1 + " B2:" + b2 + " C2:" + c2);
结果输出是:
A:126 B1:-4 C1:63 B2:-2 C2:126
为什么字节“b2”的值不等于“a”(在这种情况下为“c2”)的值,即使两个移位都不会导致二进制数字丢失?
【问题讨论】:
-
因为你已经溢出了。
标签: java casting bit-manipulation byte bit-shift