最小值不能保存为字节

时间:2018-12-06 14:57:46

标签: java binary twos-complement

根据https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html,Java中的一个字节为:

“字节数据类型是一个8位带符号的二进制补码整数。最小值为-128,最大值为127(包括127)。”

如果我在Java中以二进制补码形式写入最大值(127),则可以将其保存为字节类型。

byte positive127 = 0b01111111;

但是,如果我尝试对最小值-128进行相同操作,它将被解释为整数。我无法将其保存为一个字节。

byte negative127 = 0b10000000;

Picture from IDE

有人可以向我解释为什么在文档中指出字节类型应该能够保存此值时无法做到这一点吗?

谢谢!

1 个答案:

答案 0 :(得分:6)

0b10000000是正数int128。没有直接用于byte的字面表示,只有intlongfloatdoublecharbooleanStringnull。您将需要强制转换以将其分配给byte

byte negative128 = (byte)0b10000000;

这与任何其他表示相同:

byte a = (byte)128;
byte b = (byte)0x80;

如果从int 编译时常量表达式(例如文字)到byte的转换不涉及截断(即,从-128到127)然后该语言可以消除演员表。

byte c = -128;