負の整数は、ビット列の
補列で表現する。正確にいえば、負の整数は以下の手順でできたビット列によって表現する。
・その数の補数(=符号が逆の数)を求める
・その数を表現するビット列を作る(正の整数になっているはずだから必ず作れる)
・そのビット列の
補列を求める。これで完了
[例]
|
-2 |
もとの数 |
> |
2 |
補数 |
> |
××○× |
表現するビット列(たとえば4桁なら) |
> |
○○○× |
補列 |
自然な整数は段階的等分法によって表現し、負の整数については
補列で表現すれば、0を中心にしたある範囲の負の整数と自然な整数を一度に取り扱うことができるようになる。特に、(正負がどんな組合せになっていても)符号の世界での足し算が可能になる。
[例]
5と-2との和(=5-2)を符号の世界で計算してみる。
×○×○ 5
+ ○○○× -2 (上の例で求めた)
= ××○○ (左端でも繰上りがあったが捨てている)
このビット列が表現する数は、確かに5-2(=3)になっている。
補列は特別なビット列ではないことに注意しておこう。このために、一つのビット列が同時に二つの異なった数を表現するという問題が起る。
たとえば、××××××○×(2を表す)の
補列は○○○○○○○×(-2を表す)になるが、これは255も表している。どっちの意味かはほかの情報(正負の区別を表すビット列をもう一つ作っておくなどして)から判断しなければならない。
このように、同じ一つのビット列が同時にたくさんの意味を持っている。和を求めたりするような途中の操作では、どの意味で使われていたとしても同じ結果が得られるが、これは、もともとそれができるように、意味の持たせ方を工夫してあるからだ。
数を表わしているビット列(たとえば○○○○○○○○×)は、自然な整数(たとえば65534)か、それとも負の整数(たとえば-2)かは、見ただけでは分からない。このように、ビット列は、どう読むかによって全く異なった意味を帯びる。
これは、言語が違えば同じ単語が全く別の意味を帯びるのと似ていて、その事実さえ覚悟していれば何も怖いことはない。しかし、それが分かっていないと間違いのもとになる。
なお、番号として使っている数ならこんな混同があっても困らない(それどころかかえって便利だったりする)ので、コンピュータの世界では実際にはあまり気にしていない。
絶対に負の数ととても大きい正の数(またはとても小さい負の数と正の数)を混同しないようにしたい場合は、ビット列を×で始まるのと○で始まるのとに分け、それぞれは自然な整数/負の整数にしか使わないという技法もある。これを符号つき整数といい、左端のビットを符号ビット(×が+、○が-に見える)とよぶ。符号つき整数は安全に使える代わりに、表現できる数の集合が正負の両方の方向で半分に減る。