2011-11-04 69 views
2

我有这个十六进制值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 ...

回答

3

由于字节在-128:127范围内(see here)。当你调用byteValue()你不能得到什么,该范围的,所以它溢出(从最低值开始)

+3

而Java没有无符号的数据类型。 –

+0

@TimCooper是它:'char'是一个无符号'short' – Bohemian

5

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 
+0

...除了'char'是一个无符号'short' – Bohemian

+0

@Bohemian是的,你是对的这对保持统一的16位无符号的类型。我没有解释自己好,当我把“*整型*签署......”因为'char'显然是一个整数类型。我会解决这个,谢谢。 – AusCBloke