2015-06-06 57 views
-1

我試圖將字節值存儲在變量中,並試圖根據此計算執行一些邏輯。以字節存儲有符號值

byte mByteValue = -129; // Holding byte value 

問題是我總是得到值127,因爲我的邏輯每次都失敗。

背後的任何具體原因,爲什麼它在我的情況下表現奇怪?

+0

您需要閱讀有關字節的整數溢出和最小/最大值。 – Pshemo

+0

字節的只能存儲-128到127 –

+0

http://docs.oracle.com/javase/8/docs/api/java/lang/Byte.html#MIN_VALUE –

回答

0

byte的範圍是從-128到127.您不能存儲超出這些範圍的任何值。

這是因爲byte是8位。所以存放在字節的最大正數 -

2^7 -1 = 127. // since the first bit is sing bit; 0 for positive 

,並儲存在字節最小負數是 -

2^7 = -128 //since the first bit is sign bit; 1 for negative. 

如果你使用unsigned字節這將是255

+1

其他的方式,-128至127 –

+0

謝謝,@Hunter McMillen。這是我修復它的錯字。 – Razib

+0

這似乎是相當有用的,存儲這種排序或整數解決問題。同時,問題似乎是有效的,在任何時候都不會投票給新手。 – John

3

一在java中是byte簽署的 8位值。 8位給你256個可能的值,但由於byte有符號並且可以表示正值負值,所以這256值必須在可能的正值和負值之間粗略地分成兩半。所以你不能存儲負值-128;特別是不要指望能夠存儲-256

你實際觀察什麼時候你的字節有127被稱爲溢出值(見this wiki article

如果你需要操縱值超出此範圍,如您的示例代碼,或如一個無符號的字節,在某些時候您需要使用更寬的整數類型,如short

標準庫提供這些限制爲Byte.MIN_VALUEByte.MAX_VALUE(文檔號herehere)。

相關問題