//确定有意义
Byte b = (byte)207;
System.out.println(b); //value = 207
// ok没有意义
Integer x = Integer.parseInt("11001111", 2); //207
Byte sens = (byte)x.intValue(); //207
System.out.println(sens); //Value = -49
System.out.println(sens.intValue()); //Value = -49
这是怎么回事?
如何声明/表示值高于127的8位字节
答案 0 :(得分:8)
字节是有符号的,所以它们从-128到127.像这样生成一个int会将高位设为1(表示two's complement有符号数字中的负数)并将其转换为负数-49。
从那里,当你将它转换回sens.intValue()
的整数时,它会获取新的负值并返回它,所以你仍然得到-49。
不幸的是,您需要在int
数据类型中存储大于128的字节。
答案 1 :(得分:0)
由于Java的字节已签名,因此不能表示大于127的字节值。
在你的例子中:
Byte b = (byte)207;
System.out.println(b); //value = 207
有错误。 println的输出是-49。
Byte b = (byte)207;
System.out.println(b); //value = -49
这意味着两种情况都是相同的。
答案 2 :(得分:0)
它不能超过127正,但它可以去128负的原因是,一个字节中8个数字中的前1个表示它是负数还是正数:
1 =负面
0 =正面
由于你可以使用“1111 1111”作为负数,你可以得到-127。
答案 3 :(得分:0)
255 +负byteValue + 1将通过计数器操作返回您的数字。仍然建议将其存储在一个整数中。
如果喜欢按位,最好在其周围放一个数字环。