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中文網其他相關文章!