1の補数 | Programming Place Plus 用語集

トップページ用語集

名称 🔗

解説 🔗

ある自然数を2進法で表現したとき、各ビットを足し合わせると、それぞれ 1 になるような数のことです。

たとえば、8ビットの2進数 11001001 があるとき、各ビットを足し合わせてそれぞれが 1 になるような数は、00110110 であり、これが1の補数です。すべてのビットが 1 の場合から引き算することで求められます(11111111 - 11001001 = 00110110)。あるいは、すべてのビットについて、0 なら 1 に、1 なら 0 に反転させるという考え方も可能です(11001001 -> 各ビットを反転 -> 00110110)。

1の補数にさらに 1 を加えたもの(今度は各ビットにではない)を2の補数と呼びます。さきほどの1の補数 00110110 に +1 して 00110111 としたものが2の補数です。

1の補数も2の補数も、コンピュータで負の数を表現する方法として用いられます(2の補数による表現のほうが一般的です)。その場合、ビット列最上位ビット符号ビットとして用い、符号ビットが 0 なら正の数、1 なら負の数を表すものとします。たとえば、-95 という負の整数を1の補数で表現するには、まず 95 を2進法で表して 01011111 とします(8ビットの大きさであるものとします)。この数の1の補数を計算すると 10100000 であり、これが -95 を1の補数で表現したビット列です(符号ビットが 1 であることによって、これが +160 ではなく -95 であることが分かる)。

1の補数によって符号付きの数を表現すると、すべてのビットが 0 のときと、すべてのビットが 1 のときがいずれも、0 を意味することになります。前者では符号ビットが 0 なので正の 0、後者では符号ビットが 1 なので負の 0 を表していることになります。区別を付ける必要がないとしても、2通りのビット表現があることに注意しなければなりません。


参考リンク 🔗

更新履歴 🔗


用語集のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る