為什麼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