Java的字节实际上可以存储32位吗?
我的目标是了解字节在 Java 中的存储方式。
System.out.println("(byte) 0xFF:rn" +
Integer.toBinaryString((byte) 0xFF));
我的预期结果(byte) 0xFF是0xFF。
我的实际结果(byte) 0xFF是0xFFFFFFFF
输出:
(byte) 0xFF:
11111111111111111111111111111111
如果这是真的,那么在 in 中存储负数byte实际上与在 中存储负数没有区别int吗?
回答
toBinaryString接受一个int. 您的输入只是自动提升到int,因此它用 32 位数字表示(0xFF == -1 在二进制补码中,提升为 int 变为 0xFFFFFFFF,它仍然是 -1 但用 32 位表示,仍然在二进制补码中)。
请注意
如果无符号幅度为零,则由单个零字符“0”('u0030') 表示;否则,无符号幅度表示的第一个字符将不是零字符。
这意味着如果有前导 0,它们将不会成为输出的一部分(除非输出为 0),这意味着您将得到少于 32 位的数字。