天天看點

為什麼JAVA中(byte)128結果為-128;(byte)-129結果為127

為什麼JAVA中(byte)128結果為-128;(byte)-129結果為127

在JAVA中預設的整型為int型,int型占4個位元組,為32位。byte占一個位元組為8位。

JAVA中的二進制都是采用補碼形式存儲:

⑴一個數為正,則它的原碼、反碼、補碼相同

⑵一個數為負,則符号位為1,其餘各位是對原碼取反,然後整個數加1

int類型的128 原碼為

0000 0000 0000 0000 0000 0000 1000 0000

當将int類型128轉換為byte類型時,發生強制轉換,截取了最後8位為

1000 0000

由于第一位代表符号位,按了解應該此處應該表示為

-0

0000 0000

應該是一樣的表示

。但是我們都知道byte占8位,28為256,byte最多可以表示256個不同的數值。

0000 0000

~

0111 1111

128個

1000 0000

1111 1111

如果 byte中

0000 0000

1000 0000

表示0浪費了記憶體,是以byte中

1000 0000

表示-128。

int類型的-129原碼為

1000 0000 0000 0000 0000 0000 1000 0001

補碼為

1111 1111 1111 1111 1111 1111 0111 1111

強制轉換為byte類型為

0111 1111

0111 1111

為正數,值為127