我有这个十六进制值93,它的十进制值应该是147.由于这个数字小于255,它可以表示为一个字节。Java字节值不正确
在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字节值不正确
在java中我做了这个
System.out.println((new Integer(1)).byteValue()); //prints 1
System.out.println((new Integer(147)).byteValue()); //prints -109!!! WHY?
什么我不理解?整数147而不是打印147打印-109 ...
由于字节在-128:127范围内(see here)。当你调用byteValue()
你不能得到什么,该范围的,所以它溢出(从最低值开始)
Java中的byte
是签署,因此它代表在-128范围内的值到127,而不是其他语言的无符号替代,范围为0到255.所有Java的整数类型都是有符号的,不包括char
,因为它用于保存从0到65535的16位Unicode值。
存储为字节的值147以二进制表示为:
10010011
根据甲骨文的文档一个byte
是由于:“的8位有符号补整数”,符号值变为:
= -2^7 + 2^4 + 2^1 + 2^0
= -128 + 16 + 2 + 1
= -109
而Java没有无符号的数据类型。 –
@TimCooper是它:'char'是一个无符号'short' – Bohemian