最初に、コンピュータ内のすべてのデータは 2 進数で保存されています(0 または 1)。符号付き数値の符号も 0 または 1 で表されるため、2 進数の最上位ビットが 0
の場合は「正数」を表し、1
の場合は「負数」を表します。
オリジナルコードを使用した計算#
数値 2 と - 2 を考えます:
+2
のオリジナルコードは0000_0010
-2
のオリジナルコードは1000_0010
2 + (-2) を計算する場合
0000_0010
+1000_0010
=1000_0100
(10 進数の-4
)
明らかに、上記の計算結果は望ましい結果ではありません。
反転コードを使用した計算#
上記の問題を解決するために、「反転コード」を導入します。
反転コード:「正数」の反転コードは「オリジナルコード」と同じであり、「負数」の反転コードは符号ビットを除いて他のビットを反転させます。
+2
の反転コードは0000_0010
-2
の反転コードは1111_1101
再び 2 + (-2) を計算します。
0000_0010
+1111_1101
=1111_1111
上記の計算結果1111_1111
は反転コードであり、オリジナルコードに変換すると1000_0000
つまり 10 進数の-0
になります。
以上から、反転コードを使用すると +0
と -0
の問題が発生することがわかります。
補数を使用した計算#
反転コードに基づいて、「補数」を導入します。
補数:正数の補数はオリジナルコードと同じであり、負数の補数は「反転コード」に 1 を加えたものです。
+2
の補数は0000_0010
-2
の補数は1111_1110
再び 2 + (-2) を計算します。
0000_0010
+1111_1110
=0000_0000
上記の結果は正確に求めた結果であり、したがってコンピュータでは補数を使用して計算を行います。