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進数演算におけるビット単位反転) Leandro Alegsa
URL: https://ja.alegsaonline.com/art/72625