StudyCS.log

ただの日記

整数の補数表現について

f:id:HoriK:20201006214839p:plain


概要

 コンピュータにおける符号あり整数の表現方法をまとめている。

動機

 補数表現の意義がようやく理解できたので覚え書き。

内容

 コンピュータで符号あり整数を表現する方法として考えられるのは、

 1、先頭ビットを符号ビットにする

 2、1の補数を利用する(減基数の補数)

 3、2の補数を利用する(基数の補数)

 の3つであるが、一般的に利用するのは2の補数である。

 ここでは8bitのビット列で整数を表現することを例にして考える。

1、先頭ビットを符号ビットにする

符号ビット(1bit) 絶対値(7bit)

 この場合-127 \sim 127を表現できるが、+0-0が同じものであるにもかかわらず、1000000000000000の2通りが存在してしまうという問題がある。

 

2、1の補数を利用する

  これは元の正の数をビット反転することによって負の数を表す表現方法。

 10進数の5を、2進数で表現すれば00000101となる。これをビット反転して-5 = 11111010と割り当てることにする。

 これで符号ビットを使わずに負数を表現できるようになったわけだが、問題もあって、例えば次のような計算を考える。

5-5 = 0 

5+(-5) = 0

これはどちらも答えが0になるわけであるが、1の補数を用いた計算では

00000101 - 00000101 = 00000000 ←5-5=0

00000101 + 11111010 = 11111111   ←5+(-5)=0

と2つのビットが存在してしまう。

3、2の補数を利用する

 作業工程は1の補数と似ているが、とてもすごい効力がある。

 負数を表すときは、ビット反転ののち値を+1することにする。

 これに従えば、10進数の500000101、これをビット反転したのち+1して、

-5 = 11111011と表される。

 これで先ほどの 5-5 5+(-5) を計算する

00000101 - 00000101 = 00000000    ←5-5=0 

00000101 + 11111011 = 100000000   ←5+(-5)=0

ここで桁あふれしたビットを無視しすれば、

 100000000 = 00000000となり、2の補数で0の重複を解決できたことがわかる。

またここで注目すべき点は、加算で減算を扱うことができたということで、加算回路のみで加減算を行えたという点である。

つまり、2の補数を使って負数を表現することによって回路規模の縮小が図れる。これは2の補数表現が広く使われる理由の一つである。

まとめ

 2の補数表現を利用することで整数の加減算を加算回路のみで行うことができる。

参考文献

 「小柳滋、内田啓一郎『IT Text コンピュータアーキテクチャ改訂2版』情報処理学会 2019年」 第1章

   「栢木厚 『栢木先生の基本情報技術者教室 第15版』技術評論社 2019年」第3章