首頁 >Java >java教程 >為什麼Java的Int轉Byte會得到負值?

為什麼Java的Int轉Byte會得到負值?

Linda Hamilton
Linda Hamilton原創
2024-11-08 13:35:02206瀏覽

Why Does Java's Int-to-Byte Conversion Result in a Negative Value?

Java Int 到Byte 轉換中的意外行為

在Java 中將整數(int) 轉換為位元組(byte) 時,可能會出現意想不到的結果。考慮以下程式碼:

令人驚訝的是,輸出不是 132 而是 -124。要理解其中的原因,我們需要深入研究 Java 中基本類型的內部表示。

有符號數和補碼

在 Java 中,整數是 32 位元有符號的整數,而位元組是 8 位元有符號整數。有符號整數可以使用二進位補碼表示法表示正值和負值。在此表示法中,最左邊的位 (MSB) 決定數字的符號,0 表示正數,1 表示負數。

從 Int 轉換為 Byte

當從 int 轉換為 byte,Java 保留符號位元並丟棄剩餘的 24 位元。這表示如果 int 值為正,則產生的位元組值也將為正。但是,如果 int 值為負數(如我們的範例所示),則產生的位元組值將顯示為負數。

二進位補碼反轉

要理解這種負面行為,我們需要考慮補碼反轉過程。為了表示負數,二進位補碼將所有位元反轉並在結果上加 1。在我們的例子中,int 值 132 的二進位值是 10000100。將位元反轉並加 1 得到 01111011,十進位表示為 -124。

無符號位元組值

在我們的範例中,我們通常期望位元組值是無符號的,這會給我們一個正值132 而不是-124。要從位元組中取得無符號值,我們可以應用一個位元遮罩來刪除符號位元並僅提取低 8 位元。

這將列印“Signed: -124 Unsigned: 132”,給出我們想要的無符號值。

以上是為什麼Java的Int轉Byte會得到負值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn