int a=128;
byte b;
b=(byte)a;
System.out.println(b);
这打印-128。
但是在Java书中,相同的代码输出0。
它们之间的区别是什么?
答案 0 :(得分:0)
128表示为32位整数(int
),二进制为00000000 00000000 00000000 10000000
。
由于byte
仅为8位,当它转换为byte
时,它变为10000000
。因为Java中的所有整数都是使用二进制补码的有符号整数,所以第一位(1)是符号位,因此该值变为-128。
不确定为什么这本书说输出应该是0.你确定这个例子在书中完全相同吗?
答案 1 :(得分:0)
看,128 = 0x80,所以如果切断所有但不太重要的字节,你将获得1000 0000(二进制)。字节为-128 所以你的java书中有一个错误:)
答案 2 :(得分:0)
在Java中,这应该打印-128。如果a = 256,则应打印0。 字节是从-128到127,所以如果你输出127则是127而128则是-128,因为127 + 1 = -128。
答案 3 :(得分:0)
已经发布了正确的答案,但我很想扩展它。
要更好地了解它的工作原理,请尝试从其他来源了解它。 @DanielGibbs提供的很少,你可以使用
我建议您尝试运行以下代码:
for (int a = -256; a < 256; a++) {
byte b = (byte) a;
System.out.println(a + " -> " + b);
}
这段代码的输出应该可以让你清楚地看到int中不太重要的含义(以及确定符号的最重要的含义)以及它们如何适合字节类型。
PS。 -256不是10000000 00000000 00000001 00000000
,而是11111111 11111111 11111111 00000000
。