Java字节值不正确

我有这个hex值93,十进制值应该是147.由于这个数字小于255,它可以在一个字节中表示。

在java中我做到了这一点

System.out.println((new Integer(1)).byteValue()); //prints 1 System.out.println((new Integer(147)).byteValue()); //prints -109!!! WHY? 

我不明白的是什么? 用147的整数代替打印147它打印-109 …

因为byte在-128:127范围内( 见这里 )。 当你调用byteValue()你无法获得该范围之外的任何内容,因此它会溢出(并从最低值开始)

Java中的一个byte是有符号的 ,因此它表示-128到127范围内的值,而不是0到255范围内其他语言中的unsigned替代值。所有Java的整数类型都是有符号的,不包括char因为从那以后它用于保存0到65535之间的16位Unicode值。

存储为字节的值147以二进制表示为:

 10010011 

由于根据Oracle文档,一个byte是: “一个8位有符号二进制补码整数” ,有符号值变为:

 = -2^7 + 2^4 + 2^1 + 2^0 = -128 + 16 + 2 + 1 = -109