根据https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html,Java中的一个字节为:
“字节数据类型是一个8位带符号的二进制补码整数。最小值为-128,最大值为127(包括127)。”
如果我在Java中以二进制补码形式写入最大值(127),则可以将其保存为字节类型。
byte positive127 = 0b01111111;
但是,如果我尝试对最小值-128进行相同操作,它将被解释为整数。我无法将其保存为一个字节。
byte negative127 = 0b10000000;
有人可以向我解释为什么在文档中指出字节类型应该能够保存此值时无法做到这一点吗?
谢谢!
答案 0 :(得分:6)
0b10000000
是正数int
128。没有直接用于byte
的字面表示,只有int
,long
,float
, double
,char
,boolean
,String
和null
。您将需要强制转换以将其分配给byte
。
byte negative128 = (byte)0b10000000;
这与任何其他表示相同:
byte a = (byte)128;
byte b = (byte)0x80;
如果从int
编译时常量表达式(例如文字)到byte
的转换不涉及截断(即,从-128到127)然后该语言可以消除演员表。
byte c = -128;