首先,計算機中所有的數據都是以二進制存儲的(非 0 即 1),包括正負數的符號也只能用 0 或 1 來表示,所以二進制的最高位如果是 0
表示正數
,如果是 1
則表示負數
使用原碼計算#
假設有數值 2 和 -2 如下所示:
+2
的原碼為0000_0010
-2
的原碼為1000_0010
假設要進行 2 + (-2) 計算
0000_0010
+1000_0010
=1000_0100
(十進制的-4
)
顯然上面的計算結果不是想要的結果
使用反碼計算#
為了解決上面問題,引入 反碼
反碼:
正數
的反碼
和原碼
相同,負數
的反碼
除符號位不變,其他位取反
+2
的反碼0000_0010
-2
的反碼1111_1101
再進行 2 + (-2) 計算
0000_0010
+1111_1101
=1111_1111
上面的計算結果1111_1111
是反碼,轉成原碼為1000_0000
也就是十進制-0
綜上,可以看出使用 反碼
出現了 +0
和 -0
的問題
使用補碼計算#
在反碼的基礎上引入 補碼
補碼:正數的補碼等於 原碼,負數的補碼是在
反碼
的基礎上 加1
+2
的補碼0000_0010
-2
的補碼1111_1110
再進行 2 + (-2) 計算
0000_0010
+1111_1110
=0000_0000
上述結果正是需要的結果,所以計算機中使用補碼來進行計算