コンピュータの世界では、
数を表現する方法は多岐にわたります。特に、負の
数を扱う際には、いくつかの異なるアプローチが存在します。この記事では、符号付
数値表現における主要な4つの方式、すなわち符号・
絶対値表現、1の補
数、2の補
数、そしてエクセスN表現について詳しく解説します。
符号・
絶対値表現は、私たちが日常的に
数を扱う方法に最も近い表現方法です。この方式では、
数値の符号(正または負)を示すために1つの
ビット(符号
ビット)を使用し、残りの
ビットで
数値の
絶対値を表します。符号
ビットが0であれば正の
数、1であれば負の
数と解釈されます。例えば、8
ビットの符号・
絶対値表現では、十進
数の-43は二進
数で10101011と表され、+43は00101011と表されます。
この表現の範囲は、8
ビットの場合、-127から+127までとなります。しかし、この方式には、0を+0と-0の2通りで表せるという欠点があります。初期のコンピュータではこの方式が採用されていましたが、現在のコンピュータではあまり使用されていません。
1の補数
1の補
数表現では、負の
数は元の
数の
ビットを反転させることによって得られます。例えば、二進
数の00101011(43)の1の補
数は11010100(-43)となります。ここでも、0は+0(00000000)と-0(11111111)の2通りの表現があります。この表現範囲は、8
ビットの場合、-127から+127となります。
1の補
数を用いた加算では、通常の二進
数加算に加えて、桁あふれ(キャリー)を結果に足し戻す必要があります。例えば、-1と+2を加算する際、通常の加算では正しい結果が得られないため、キャリーを足し戻すことで正しい結果を得ます。この方式は、かつてのコンピュータで広く使用されていましたが、現在は2の補
数表現が主流となっています。
2の補数
2の補
数は、現代のコンピュータで最も一般的に使用されている負の
数の表現方法です。この方式では、負の
数は、1の補
数に1を加えることで得られます。この方法の利点は、0の表現が一意であり、加算時にキャリーの処理が不要な点です。
例えば、8
ビットの整
数では、-1は11111111で表され、-128は10000000で表されます。また、ある
数の符号を反転させるには、その
数のすべての
ビットを反転させてから1を加えるだけで、正負どちらの
数に対しても有効です。2の補
数表現での加算は、符号なしの
数値と同様に扱うことができます。ただし、オーバーフローの検出方法は異なります。
エクセスN
エクセスN表現は、固定された正の整
数N(
バイアス値)を用いて
数を表現する方式です。ある整
数は、元の値にNを加えた符号なし整
数として表現されます。例えば、0はNとして表され、-Nは0として表されます。Nには、通常、2のべき乗から1を引いた値が用いられます。この表現は、浮動小
数点
数の指
数部でよく使用されます。例えば、IEEE浮動小
数点標準では、
単精度浮動小数点数ではエクセス127、
倍精度浮動小数点数ではエクセス1023が採用されています。
各表現の比較
表現方法 | 4ビット表現例 | 範囲 | 0の表現 | 加算時の処理 | 主な用途 |
---|
:--- | :-- | :--- | :-- | :- | :-------- |
符号・絶対値 | +3: 0011, -3: 1011 | -7 to +7 | 2通り | なし | 初期のコンピュータ、一部の十進コンピュータ |
1の補数 | +3: 0011, -3: 1100 | -7 to +7 | 2通り | キャリーバック | かつてのコンピュータシステム、IPv4ヘッダーチェックサム |
2の補数 | +3: 0011, -3: 1101 | -8 to +7 | 1通り | なし | 現代のコンピュータシステムの整数演算 |
エクセスN | -3: 0101, +3: 1011 | N-8 to N+7 | 1通り | なし | 浮動小数点数の指数部 |
まとめ
コンピュータにおける負の
数の表現は、その歴史の中で様々な進化を遂げてきました。符号・
絶対値表現から始まり、1の補
数、そして現代の主流である2の補
数へと発展してきました。エクセスN表現は、浮動小
数点
数の指
数部を効率的に扱うために広く利用されています。これらの表現方法を理解することは、コンピュータの内部動作を理解する上で非常に重要です。