0 為正數
原碼 00000000 00000000 00000000 00000000
反碼 00000000 00000000 00000000 00000000 正數反碼等于原碼
補碼 00000000 00000000 00000000 00000000 正數補碼等于原碼
0 為負數
原碼 10000000 00000000 00000000 00000000
反碼 11111111 11111111 11111111 11111111 負數反碼等于原碼符號位不變,其余取反
補碼 00000000 00000000 00000000 00000000 負數補碼等于反碼+1
用補碼
1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]補 + [1111 1111]補 = [0000 0000]補=[0000 0000]原
用反碼
1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0
數值 | 原碼 | 反碼 | 補碼 |
---|---|---|---|
+0 | 0000 0000 | 0000 0000 | 0000 0000 |
-0 | 1000 0000 | 1111 1111 | 0000 0000 |
負數原碼轉補碼,最高位不變,其余取反,然后 +1
10000001
11111110
11111111
負數補碼轉原碼,最高位不變,其余取反,然后+1 補碼->反碼->原碼->反碼->補碼 ,(二進制數,先-1再取反和先取反后+1,結果一樣)
11111111
10000000
10000001
負數反碼轉原碼
符號位不變,其余取反
11111111
10000000
區別:
感謝您的耐心閱讀,如果您發現文章中有一些沒表述清楚的,或者是不對的地方,請給我留言,您的鼓勵是作者寫作最大的動力。
作 者 : @mousycoder
原文出處 : http://mousycoder.com/thinking-in-jvm/2/
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。