補数・負数の表現

補数

数値の各桁の重みの基本となる数を基数という。補数とは、与えられた数Aを、定められた数Bから引いた数のことである。


1.基数の補数―定められた数Bに、基数のべき乗を用いる。
K桁のN進数のNの補数:N^K-A
2.基数-1の補数―定められた数Bに、基数のべき乗−1を用いる。
K桁のN進数のN-1の補数:N^K-1-A


(例1)Aが10進数の100のときの補数
・10の補数:1,000-100=900
・9の補数:1,000-1-100=899


(例2)Aが2進数の00000110のときの補数
・2の補数:100000000-00000110=11111010
・1の補数:100000000-1-00000110=11111001

2進数の補数の求め方

1.1の補数―与えられた数Aのビットを反転する。
2.2の補数―1の補数に1を加える。


(例1)8桁の2進数00001111の1の補数は、反転させて11110000となる。



(例2)上の結果に1を加えると11110001となり、これが2の補数。


ちなみに直接2の補数を計算するには、たとえば00001111を考えるとき、9桁の100000000から引けばよい。



※基数−1の補数の定義である、K桁のN進数のN-1の補数:N^K-1-A(この例では、Nは2、Kは8、Aは00001111)より、まずN^K-1を計算したのが11111111というわけ。

負数の表現

・多くのコンピュータでは負数を2の歩数で表す。
・1番左のビットを符号ビットとする。(0:正かゼロ、1:負)
したがって、上の例を借りてくれば、2進数00001111(10進数で15)の2の補数11110001は-15となる。

(例)10進数の35-13の計算
35を二進数に変換すると00100011となる。-13については、まず13を2進数に変換すると00001101となり、これを反転させて1を加えると11110011となる。これが-13である。



あふれた9桁目のビットは捨て、8ビットを残すと00010110。すなわち22となり、計算ができた。


負数を2の補数で表せば、値が成果付加を気にすることなく、加算回路で計算できる。

補数がちょっと分かりにくいのでチェック問題も解いてみた。


チェック問題:

問1.次の2進数の2の補数を示せ。
(1)01011100
(2)11101110

問2.負数を2の補数で表すコンピュータで、10進数の-56の2進数表現は8ビットでいくらか。ただし、一番左のビットを符号ビットとし、1の場合が負である。

解答:

問1.反転させて1を加えればよい。
(1)反転させて10100011。1加えて10100100。
(2)反転させて00010001。1加えて00010010。

問2.まず56の2進表現を求め、その数を反転させて1を加えればできあがり。
56の2進表現は8+16+32だから、つまり00111000。反転させて11000111。1加えて11001000。これが−56の2進表現である。


今日はここまで。補数と負数は初めはややこしい感じがしたけど、慣れるとそうでもないように思う。2進数の足し算引き算ができれば問題なし!