為什么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
應該是一樣的表示0
。但是我們都知道byte占8位,28為256,byte最多可以表示256個不同的數值。
0000 0000
~0111 1111
128個
1000 0000
~1111 1111
128個
如果 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