Java 大于127的字节值

Java 大于127的字节值,java,byte,Java,Byte,//Ok有道理 Byte b = (byte)207; System.out.println(b); //value = 207 //好吧,没有意义 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

//Ok有道理

Byte b = (byte)207;
System.out.println(b); //value = 207
//好吧,没有意义

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位字节,然后

对Java中的字节进行签名,使其从-128变为127。像这样的整型将拾取1处的高位(表示有符号数字中的负数),并将其转换为负数-49

从这里开始,当您使用
sens.intValue()
将其转换回整数时,它会拾取新的负值并返回它,因此仍然得到-49


不幸的是,您需要在
int
数据类型中存储大于128的字节。

因为Java的字节是有符号的,所以不能表示大于127字节的值

在您的示例中:

Byte b = (byte)207;
System.out.println(b); //value = 207
有一个错误。println的输出为-49

Byte b = (byte)207;
System.out.println(b); //value = -49

这意味着这两种情况是相同的。

它不能超过127个正数,但可以超过128个负数的原因是,字节中8位数字的前1位表示它是负数还是正数:

1=负

0=正


由于您可以将“1111111”用于负数,因此可以得到-127。

255+负字节值+1通过计数器操作返回您的数字。仍然建议存储在int中


如果您喜欢按位排列,最好在其周围放置一个数字环。

这并不能解释为什么第一个案例打印207他们第一个案例没有打印207,他只是在它旁边有一个207的注释。
x.intValue()
的值是207,但转换为byte将把它转换为-49
System.out.println((byte)x.intValue())将打印-49<代码>System.out.println(x.intValue())
将打印207答案是正确的,但只需将其抛在那里以备将来阅读:将值存储在
short
数据类型中可能比
int
更合适。(Short是2个字节,int是4个字节。从一个字节值开始,Short应该足够了,它将节省2个字节的内存,这是很小的,但是当您有很多这样的字节值时,它会累积。)