コンピュータにおける1の補数と2の補数とは?

FE対策

はじめに

コンピュータの計算方法において、負の数をどのように表現するかは重要な問題だ。
この中で「1の補数」と「2の補数」は、2進数を用いて負の数を表す手法としてよく知られている。

この記事では、これらの補数の概念と違い、使用例について詳細に解説する。


スポンサーリンク
スポンサーリンク

1の補数とは

1の補数は、2進数の各ビットを反転する(0を1に、1を0に)ことで得られる数だ。主に負の数を表現するために用いられる。

計算方法

1の補数を計算するのは非常にシンプルだ。
1. 各ビットを反転させるだけ。
: 2進数0110の1の補数は1001

使用例

例えば、4ビットで-5を表現する場合、まず5の1の補数を計算する。
1. 5の2進数表記: 0101
2. 1の補数: 1010

注意点

1の補数には「符号反転問題」がある。これは、+0(0000)と-0(1111)という二種類のゼロが存在してしまうことだ。この問題が計算を複雑にする原因となる。


2の補数とは

2の補数は、1の補数に1を加えることで得られる数である。現代のコンピュータでは、この方法が負の数の表現として主流となっている。

計算方法

  1. 各ビットを反転して1の補数を求める。
  2. その1の補数に1を加える。

使用例

5の2進数表記0101を4ビットで-5として表現する場合:
1. 5の1の補数: 1010
2. 1の補数に1を加える: 1010 + 1 = 1011

長所

2の補数が広く使われている理由は、その設計が計算処理の簡便性と効率性を大きく向上させるからである。以下に主な理由を挙げる。


1. 符号反転問題の解消

1の補数では「正のゼロ」と「負のゼロ」という二種類のゼロが存在するため、これが演算処理を複雑にする。たとえば、ゼロに対する条件分岐や比較演算を行う場合、どちらのゼロも考慮しなければならない。

一方、2の補数ではこの問題が解消されている。ゼロは常に0000...で表され、正負の区別がないため、扱いやすい。


2. 加減算の統一

2の補数を使用すると、負の数も正の数と同じ加減算のアルゴリズムで計算できる。具体的には、負の数を加算する場合、2の補数をそのまま用いることで減算を模倣できる。

例: 7 – 5
1. 7の2進数表記: 0111
2. 5の2の補数: 1011
3. 加算: 0111 + 1011 = 10010(下位4ビットを取る: 0010 = 2

これにより、減算専用の回路が不要になり、計算装置の設計が簡単になる。


3. 桁あふれ検出の容易さ

2の補数を使用すると、桁あふれ(オーバーフロー)を簡単に検出できる。たとえば、最上位ビット(符号ビット)が変化した場合、桁あふれが発生したとみなせる。この性質は演算結果の正当性を確認する上で非常に重要だ。


4. シンプルなアルゴリズム

2の補数では、負の数も含めて全ての数値を一貫した形式で扱うことができる。このため、ハードウェアでの実装が容易で、演算器の構造が単純化する。これにより、計算速度が向上し、リソースの節約も可能になる。


5. 標準化と互換性

現代のコンピュータシステムでは、2の補数表現が事実上の標準となっている。この標準化により、異なるシステム間でのデータ交換やプログラム移植の際に互換性が保たれる。


1の補数と2の補数の比較

特徴 1の補数 2の補数
計算方法 各ビットを反転 各ビットを反転して1を加える
負の数の表現 可能 可能
符号反転問題 あり なし
使用用途 負の数の表現(旧方式) 負の数の表現(現行方式)

10進数、16進数、2進数の変換テーブル

10進数 16進数 2進数
0 0 00000000
1 1 00000001
2 2 00000010
3 3 00000011
4 4 00000100
5 5 00000101
6 6 00000110
7 7 00000111
8 8 00001000
9 9 00001001
10 a 00001010
11 b 00001011
12 c 00001100
13 d 00001101
14 e 00001110
15 f 00001111
16 10 00010000
17 11 00010001
18 12 00010010
19 13 00010011
20 14 00010100
21 15 00010101
22 16 00010110
23 17 00010111
24 18 00011000
25 19 00011001
26 1a 00011010
27 1b 00011011
28 1c 00011100
29 1d 00011101
30 1e 00011110
31 1f 00011111
32 20 00100000

まとめ

1の補数と2の補数は、どちらも負の数を表現するための手法だが、2の補数の方が現代のコンピュータシステムに適している。理由としては高い効率性、実装の簡便性、符号反転問題の解消といったことが挙げられる。

2の補数は、これにより、計算処理がより直感的かつ一貫性のある形で実現され、計算機科学の発展に寄与している。

コメント