2011-11-04 99 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