符号つきの整数を計算機の内部で表現する方法としては 「絶対値表示」と「補数表示」がある. 「絶対値表示」とは整数の絶対値を2進数で表現して, その先頭ビットに符号ビット(正ならば0, 負ならば1)をつけたものである. この方法は素朴でわかりやすいが, 0という整数の表現方法は0と-0の2種類存在することになる.
「補数表示」は以下に示すように,もう少し込み入った定義になっているが, ほとんどの計算機では,この補数表示が採用されている.
32ビットの符号つき整数の補数表示では, 0及び正の整数は「絶対値表示」同様に, 31ビットの2進数の先頭に符号ビット(0)をつけたもので表される.これに対して,負の整数は, その整数の.絶.対.値の「補数」に 符号ビット(1)をつけたもので表される. 一般に複数の「補数」の定義があるが, ここで言う補数とは「2進数における2の補数」(真補数)のことである. この場合, ある数Xの補数とは,「Xに加えると2^nになるような数」で, 「各ビットの0と1を入れ換え,最下位桁に1を足した数」といっても 同じである.
要するに,符号つき整数を 符号ビットまで含めて単純に32ビットの(正の)2進数と見なした時, 負の整数Nは2^31+Nとして表される(下表). この方法では,-2^31 から 2^31-1までの 数を表現できる.
+-------------------------------------+---------+ | 内部表現 | 数値 | |-------------------------------------|---------| | 11111111 11111111 11111111 | -1 | | 11111111 | | |-------------------------------------|---------| | 11111111 11111111 11111111 | -2 | | 11111110 | | |-------------------------------------|---------| | ... ... ... | | |-------------------------------------|---------| | ... ... ... | | |-------------------------------------|---------| | 10000000 00000000 00000000 | -2^31 | | 00000000 | | |-------------------------------------|---------| | 01111111 11111111 11111111 | +2^31-1 | | 11111111 | | |-------------------------------------|---------| | ... ... ... | | |-------------------------------------|---------| | ... ... ... | | |-------------------------------------|---------| | 00000000 00000000 00000000 | 1 | | 00000001 | | |-------------------------------------|---------| | 00000000 00000000 00000000 | 0 | | 00000000 | | +-------------------------------------+---------+
この表現を用いると,加減算において符号部分も含めて正の数と 統一的に扱うことができるようになり, 演算回路の構成が簡単になるため, 多くの計算機でこの表現法が用いられている.
このように補数表示では, 内部表現のビット列と整数としての値が1対1に対応しているので, データを数字ではなくビット列として処理したい時には, 整数型の変数が使われる.
NUMAGUTI Atusi <a1n@gfdl.gov> Last Modified: Thu Aug 31 13:03:56 EDT 1995