0

这是一段代码:

byte c = (byte) (0b10101010);
byte d = (byte) (c >> 1);
System.out.println(d);

结果是-85。(我知道原因是因为字节 c 在进行右移操作之前会自动扩展为 int (高 3 个字节全部组成 1))

这是另一段代码:

byte c = (byte) (0b10101010 >> 1);
System.out.println(c );

结果是 85。所以我的问题是在进行右移操作之前,为什么二进制代码(0b10101010 不会像上面的代码一样扩展到 int (ff, ff, ff, 0b10101010)?)

4

2 回答 2

0

没有“扩展到 int”。发生的是符号扩展,这意味着最高位将用符号位填充(负数为 1,非负数为 0)。

于 2013-10-25T05:25:07.427 回答
0

像 0b10101010 这样的字面量具有类型int,因此无需将其转换为更大的类型。此外,它是一个正数,因此一开始就不会应用符号扩展。

于 2013-10-25T05:26:14.120 回答