C言語を習得する

(1-2)2の補数

2進数で負数を表現するときは最上位ビットを符号として表現します。
8ビットで数値を表現しようとしたとき、

10進数2進数
12701111111
400000100
300000011
200000010
100000001
000000000
-111111111
-211111110
-311111101
-411111100
-12810000000

という感じになります。
正数値に関してはもうお分かり頂けると思いますが、問題は負数です。

上のような負数の表現を2の補数と言います。
まずは2の補数値の求め方をご説明します。

-1の場合を例にとってみます。
最初は符号を取った正数値を2進数で表現します。
    |-1| = 00000001
です。

これらのビットをすべて反転させます。
    11111110

この全ビット反転させた値を1の補数と言います。

2の補数にするにはこの全ビット反転させた値に+1します。
    11111110 + 00000001 = 11111111
となります。

で、1の補数ではなくなぜ2の補数を用いるのかと申しますと、
1の補数ですと0という表現が2つできてしまうからです。
    |0| = 00000000

これを全ビット反転しますと、
    11111111
です。1の補数ではこの値も0です。

これでは都合が悪いので+1しますと
    11111111 + 1 = 00000000
となり、1桁あふれるのですがコンピュータは8ビットしか認識しませんので0となります。
結果としては2の補数を用いますと0という数値をうまく表現できます。

「2の補数」、重要ですので覚えてくださいね。



ページのTOPへ






メニュー