在java中一個字節由8個二進位組成。
計算機中有原碼,反碼,和補碼。
原碼
將最高為作為符號位0正,1負。其余各位表示數值的絕對值。
+7的原碼是 00000111
-7的原碼是 10000111
原碼的問題是+0和-0的表示
+0是00000000
-0是 10000000
2個數值不同。
反碼
一個數如果為正,則它的反碼與原碼相同,如果為負,則符號位為1,其余取反。
+7是00000111
-7 是 11111000
反碼的問題也是+0和-0的問題
+0是 00000000
-0 是 11111111
2個數值不同。
補碼
利用溢出,我們將減法變成加法。 一個數如十進制,一個字節一個數,有8位,超過就進一。
一個數為正,則它的原碼,反碼,補碼相同。如果為負,則符號位為1,其余對原碼取反。然后加1
+7是 00000111
-7是 11111001
+0是00000000
-0是100000000,然后丟掉最高的9位則為00000000
和+0的表示相同,所以計算機中是采用的是補碼。
已知一個負數的補碼,轉換為十進制。
- 先對各位取反。
- 將其轉換為十進制數
- 加上負號,再減去1.
如 11111010 先取反
00000101 轉換為十進制
是5 加上負號
是-5 再減去1
是-6