我不明白以下代码的输出:
public static void main(String[] args) {
int i1, i2, i3, i4;
byte b;
i1 = 128;
b = (byte) i1;
i2 = (int) b;
i3 = 0 | b;
i4 = 1 << 7;
System.out.format("i1: %d b: %d i2: %d i3: %d i4: %d\n", i1, b, i2, i3, i4);
}
Run Code Online (Sandbox Code Playgroud)
输出:
i1: 128 b: -128 i2: -128 i3: -128 i4: 128
Run Code Online (Sandbox Code Playgroud)
因为byte是一个8位二进制补码有符号整数,所以在最高有效位中带有1的二进制表示被解释为负值,这就是为什么b变成了-128,我完全没问题.我也明白,在施法时保持解释一致可能是一个好主意,如同i2.但是不应该i3并且i4具有相同的位模式,因此映射到相同的int值?
在这一行:
i3 = 0 | b;
Run Code Online (Sandbox Code Playgroud)
int由于|运算符,"b"变量会自动提升为带符号扩展名的类型,因此变为(int)-128,即0xffffff80.
当"或"ed为零时,它仍然是相同的值,即-128
| 归档时间: |
|
| 查看次数: |
1494 次 |
| 最近记录: |