我有這個十六進制值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