我試圖將字節值存儲在變量中,並試圖根據此計算執行一些邏輯。以字節存儲有符號值
byte mByteValue = -129; // Holding byte value
問題是我總是得到值127,因爲我的邏輯每次都失敗。
背後的任何具體原因,爲什麼它在我的情況下表現奇怪?
我試圖將字節值存儲在變量中,並試圖根據此計算執行一些邏輯。以字節存儲有符號值
byte mByteValue = -129; // Holding byte value
問題是我總是得到值127,因爲我的邏輯每次都失敗。
背後的任何具體原因,爲什麼它在我的情況下表現奇怪?
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
一在java中是byte
是簽署的 8位值。 8位給你256個可能的值,但由於byte
是有符號並且可以表示正值和負值,所以這256值必須在可能的正值和負值之間粗略地分成兩半。所以你不能存儲負值-128;特別是不要指望能夠存儲-256
。
你實際觀察什麼時候你的字節有127
被稱爲溢出值(見this wiki article)
如果你需要操縱值超出此範圍,如您的示例代碼,或如一個無符號的字節,在某些時候您需要使用更寬的整數類型,如short
。
要正確地將字節轉換爲int,請使用mByteValue & 0xFF
。您可以在這裏閱讀有關Two's complement
的更多信息:https://en.wikipedia.org/wiki/Two%27s_complement。
您需要閱讀有關字節的整數溢出和最小/最大值。 – Pshemo
字節的只能存儲-128到127 –
http://docs.oracle.com/javase/8/docs/api/java/lang/Byte.html#MIN_VALUE –