二進法における負の数表現:符号付き絶対値、補数、二の補数
減算は、被減数を負の値として扱うことで加算に変換できます;例えば、7 − 5 は 7 + (−5) となります。
正の二進表現をマスターしたら、次のステップは負の数をエンコードし、同じ加算ルーチンで減算を実行できるようにすることです。
十進法では、最上位桁にマイナス記号を前置します(例:−5)。二進ハードウェアではハイかローの2状態しかないため、符号をビットパターン自体にエンコードしなければなりません。
この文脈では、「マイナス」記号のような第3の記号はありません。1つのビットを数学的符号を表すために予約する解決策があります:

ビットを位取り重み以外の目的で使用すると混乱を招きます;例えば、1101₂ は最上位ビットを符号として扱わない限り13と読まれます。
まず、最大絶対値を収容するために必要な総ビット幅を決定し、すべての演算がその幅内に収まるようにします。
以下の例では、最上位ビットを符号として扱うことで、−7(1111₂)から +7(0111₂)の範囲に制約し、誤解釈を防いでいます。
−5 を 1101₂ としてエンコードすることは、先頭ビットが値ではなく符号を表す符号付き絶対値システムを示し、位取りの純粋さを実用性とトレードオフしています。
最上位ビットが符号を示し、残りのビットが標準的な位取り値(2の累乗)を保持します。
補数
符号付き絶対値は概念的に単純ですが、二進法加算を複雑にします。−5(1101₂)を通常の加算で他の数に加えるにはどうすればよいでしょうか?
カスタム加算アルゴリズムを作ると目的を損ないます;それは筆算減算と同等であり、計算上の利点を失います。
代替案である補数法は、負の数を標準的な二進法加算で加算可能にし、位取り重みと自然に整合します。
この方式では、最上位ビットは依然として範囲を区切りますが、負の位取り重み(例:−8)を持ちます。例えば、−5 は次のようにエンコードされます:

右3ビットで0〜7の大きさを表し、最左ビットが0または−8を表すため、−7(1001₂ = −8 + 1 = −7)から +7(0111₂ = 0 + 7 = 7)までの整数を表現できます。
正の値は変わりませんが、負の値には補数演算が必要です。

右側の負の二進数は、右3ビットと最左ビットの負の8の和であり、正の数と同じ進行には従いません。
代わりに、右3ビットを、負の8の位取り値に加えたときに望む負の合計になるように設定する必要があります。
二の補数
右3ビットは、正の対応値の二の補数です。例えば:

負の重みビットが第4ビット(−8)である場合、任意の正の数の二の補数は、それに−8を加えてその数の負の等価値を得るために必要な値です。
二の補数の計算は簡単:すべてのビットを反転(一の補数)し、1を加えます。例えば、5(101₂)の二の補数を得るには、まず反転して010₂、次に1を加えて011₂となり、これは3ビット二の補数で−5を表します。
最上位ビットを含むすべてのビットを一度に操作しても同じように機能します。例えば、0101₂(5)を−5に変換:
すべてのビットを反転 → 1010₂;1を加える → 1011₂、これは4ビット二の補数で−5を表します。
二の補数変換を実行する前に、負の重みビットの位置を固定することが重要です。第8ビットが負の重みビット(10000000₂)なら、0000101₂ の二の補数は 1111011₂ となり、8ビット二の補数で−5を表します。
したがって、8ビットシステムでは、+5は 00000101₂、−5は 11111011₂ となります。
関連ワークシート:
- 二進法数学ワークシート
産業技術