Java字节值不正确
我有这个十六进制值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
你可以在下面搜索框中键入要查询的问题!
我有这个十六进制值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
# 1 楼答案
因为字节在-128:127(see here)范围内。当您调用
byteValue()
时,无法得到超出该范围的任何内容,因此它会溢出(并从最低值开始)# 2 楼答案
Java中的
byte
是有符号的,因此它表示-128到127范围内的值,而其他语言中的无符号替代值在0到255范围内。Java的所有整数类型都是有符号的,不包括char
,因为它用于保存0到65535之间的16位Unicode值存储为字节的值147用二进制表示为:
因为根据Oracle文档,a
byte
是:“一个8位有符号的二的补码整数”,所以有符号值变成: