Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

1の補数(イチノホスウ)とは | 意味や読み方など丁寧でわかりやすい用語解説

1の補数(イチノホスウ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

いちのほすう (イチノホスウ)

英語表記

one's complement (ワンスコンプリメント)

用語解説

1の補数とは、主にコンピュータが負の数を表現するために用いられる二進数における表現方法の一つである。現代のコンピュータではほとんど2の補数表現が使われているが、1の補数はその基礎を理解する上で重要な概念であり、特定の計算や古いシステムで使われることもあるため、システムエンジニアを目指す上で知っておくべき用語だ。基本的に、ある二進数の1の補数は、その二進数の各ビットを反転させることで得られる。すなわち、0は1に、1は0に置き換える操作を指し、この操作はビット反転、あるいはNOT演算とも呼ばれる。

具体的に1の補数表現で負の数を計算する方法を見てみよう。まず、扱う数値のビット幅を決める必要がある。例えば、4ビットで数値を表現する場合を考える。正の数5は二進数で0101と表現される。この数値を1の補数表現で負の数に変換するには、全てのビットを反転させる。0101の各ビットを反転させると、1010となる。この1010が、4ビットの1の補数表現における負の5(-5)となる。同様に、正の数2は0010と表現され、その1の補数は1101となる。このとき、最上位ビット(一番左のビット)が0であれば正の数、1であれば負の数を示す符号ビットとして機能する。ただし、正の数も負の数も、その絶対値部分を表現するビット列が、最上位ビットを除いた残りビットで表されるわけではない点が通常の符号表現とは異なる。

1の補数表現における数の加算は、通常の二進数加算と同じようにビットごとに計算していく。しかし、桁あふれ(キャリー)が発生した場合に特別な処理が必要になる。例えば、4ビットで5と-2を加算するケースを考える。正の5は0101、負の2は正の2である0010の1の補数である1101となる。これらを加算すると、0101 + 1101 = 0010となるが、このとき最上位ビットから桁あふれ(キャリー)が1発生する。1の補数表現では、この桁あふれを結果の最下位ビットに加算するという「エンドアラウンドキャリー」と呼ばれる処理を行う。したがって、0010にキャリーの1を加算すると0011となる。これは正の3を表すため、5 + (-2) = 3という正しい計算結果が得られる。

別の例として、2と-5を加算してみる。正の2は0010、負の5は正の5である0101の1の補数である1010となる。これらを加算すると、0010 + 1010 = 1100となる。この場合は桁あふれが発生しないため、結果は1100となる。1100は最上位ビットが1であるため負の数を示し、その絶対値は1100の1の補数である0011、すなわち3である。したがって、結果は-3となり、2 + (-5) = -3という正しい計算結果が得られる。

1の補数表現の最大の特徴であり、同時に欠点ともなるのが「二つのゼロ」の存在である。例えば4ビットで表現する場合、正のゼロは0000となる。この0000の1の補数を取ると1111となるが、この1111もまた負のゼロ(-0)として扱われる。つまり、0を表す表現が0000と1111の二通り存在してしまうのだ。これは、数値を比較する際に二つのゼロを考慮する必要があるため、回路設計が複雑になったり、演算処理の効率が低下したりする原因となる。また、表現できる数値の範囲も、例えば4ビットであれば-7から+7までとなり、0が二つある分、2の補数表現に比べて表現できる絶対値の最大値が一つ少なくなる。

現代のほとんどのコンピュータのプロセッサでは、この「二つのゼロ」の問題がなく、加算処理もより単純に行える2の補数表現が採用されている。2の補数表現では、正のゼロは0000のみであり、負のゼロという概念は存在しないため、回路設計が簡素化され、効率的な演算が可能となる。1の補数は、主にコンピュータの数値表現の歴史や理論を学ぶ上で重要な概念として位置づけられている。また、1の補数表現に1を加えることで2の補数表現が得られるという密接な関係があるため、1の補数を理解することは、より広く使われる2の補数の理解を深める上でも役立つ。特定のネットワークプロトコルのチェックサム計算など、一部の特殊な用途でビット反転を伴う演算が1の補数的な振る舞いをすることがあるが、これは一般的な数値表現としての1の補数とは文脈が異なる。システムエンジニアにとって、負の数表現の選択がハードウェアやソフトウェアの設計にどのような影響を与えるかを理解する上で、1の補数に関する知識は不可欠であると言える。

関連コンテンツ