本文へ移動

1の補数(2進数演算におけるビット単位反転)

1の補数は、各ビットを反転する2進数のビット単位演算である。歴史的には負数表現に用いられ、一部のチェックサム算法でも使われるが、ゼロが2通りに表現されるなどの特徴がある。

概要

1の補数は、各2進数字を反転する基本的な2進演算である。すなわち、各0は1になり、各1は0になる。これはしばしば、2進値のビット単位補数、または論理NOTと説明される。低水準のコンピューティングやデジタル論理では、この演算は算術上の符号反転とは区別される。ただし、初期の数値表現の一部では、負の値を符号化するために1の補数が使われた。2進表記の一般的な背景については、2進数を参照。

表現と簡単な例

固定ビット幅のフィールドに適用すると、1の補数ではすべてのビットが反転された新しいパターンが得られる。たとえば4ビットのシステムでは、0101の1の補数は1010である。注目すべき結果として、ゼロには2通りの表現が存在しうる。すなわち、すべて0の0000と、すべて1の1111は、1の補数の規則に従って解釈すると、どちらも加法単位元として評価される。

算術的性質

1の補数を符号付き整数に用いる場合、負の値は対応する正の大きさの補数を取ることで作られる。加算には特別な処理が必要である。加算によって最上位ビットから桁上がりが生じた場合、その桁上がりを最下位ビットに戻して加算しなければならない。これは「エンドアラウンドキャリー」と呼ばれる。この追加の手順により、1の補数演算は2の補数演算および符号なし2進加算と区別される。

用途と歴史

1の補数は、別個の符号ビットを使わずに負数表現を得る簡便な方法として、いくつかの初期コンピュータ・アーキテクチャで採用された。また、特定のチェックサムや誤り検出方式にも用いられる。そこでは、複数ワードのデータをコンパクトなチェックサム値にまとめるため、1の補数和が使用される。時代が進むにつれて、多くのシステムはハードウェアを簡素化でき、二重ゼロの問題を解消できる2の補数へ移行した。

比較と主な事実

符号付き絶対値表現および2の補数表現と比べると、1の補数は計算が簡単である一方、ゼロが2通り存在することと、加算時にエンドアラウンドキャリーが必要になることから複雑さも生じる。2の補数は、負数を補数に1を加えたものとして定義することで、これら両方の問題を取り除く。詳しくは2の補数を参照。現代のプログラミングでは、ビット単位補数演算子(多くの場合~と表記)は、システムが1の補数方式か2の補数方式の整数演算を用いるかにかかわらず、2進表現に対して同じ基本的な反転を行う。

関連項目

著者

AlegsaOnline.com 1の補数(2進数演算におけるビット単位反転)

URL: https://ja.alegsaonline.com/art/72625

共有