論理回路 

目次


第1節 二進数

第2節 二進数の加算回路

第3節 減算回路

第4節 負数と補数


テスト

Logをみる

Back
 

第5章 計算回路

    第5章 計算回路

 第4節 負数と補数

 プラスあるいはマイナスであるかに従ってある桁を0または1にすると、負数も正数と同様に扱えます。例えば8桁(ビット)の場合ですと、最上位ビットを符号ビットにあてますと、下の7ビットをその絶対値の数のために割り振れます。0から±127まで扱えます。ただし+0と−0は同一視します。

 数x と数y の和を取る場合

(ケース−−)x が負 かつ y が負 なら、値は |y| + |x|、符号は1

(ケース−+)x が負 かつ y が正 なら、|y| - |x|>=0 のときその値を採用、符号は0、その他は |x| -|y| を作りその値を採用、符号は1

(ケース+−)x が正 かつ y が負 なら、|x| - |y|>=0 のときその値を採用、符号は0、その他は |y| -|x| を作りその値を採用、符号は1

(ケース++)x が正 かつ y が正 なら、値は |x| + |y|、 符号は0

 2番目(ケース−+)、3番目(ケース+−)のケースでは減算をしてみてborrow が出ないなら >= 0 と判断できます。出ればその逆です。

 負数が入ってくるとかなり複雑です。そこで負数を「補数 complement」で表す方法があります。補数の原理は例えば二進数を8桁で扱っている場合、9桁以上の大きい数N を一つ固定します(あるいは8桁のうち最大数をN にあてます)。そして、8桁以下の数x (正数とします)について

  N-x

をx の「(Nに対する)補数」といい、負数の表現とします。

 但し、補数の補数も考えることができます(即ち負数の補数もあり)。その場合

N-(N-x)

ですから、元へ戻ります。

 正のx に対して

 x' = N -x  (1)

としますと、正数y に対して

 y+x' = N+y-x (2)

となりますので、足し算をx' とy とですれば、引き算y-x をしたことになるのです。

 |y| >= |x|  (3)

のときは結果からN を引き去る必要があります。

 |y| < |x|  (4)

の場合は(2)は

 = N -(x-y)

ですから、絶対値が大きいx よりy を引いて、補数を取ることと一緒です。この場合はN を引き去る必要はありません。(3)の場合にN を引き去るのは容易なようにが選ばれています。

 このように、補数の表現を導入すると減算の場合のケース分けが簡単になります。

 例えば N=(100000000) とします。x = (00110100) としますと、

   (100000000)
   -(00110100)
-----------------
    (11001100)

となります。即ちx の補数は(11001100) なのです。

 N=(100000000)の場合N を引き去るのは簡単です。9桁目の1を取り去ればいいのです。このようなN を選んだ場合、この補数を特に「2の補数 2's complement」といいます。

 補数を取るのは補数化回路で自動的に行います。それは本質的には減算回路です。アクセサリの中の電卓を使って2進モードにして -00110100= と入れれば2の補数が表示されます。

N = (11111111)

を選ぶこともあります。このときは単純に1と0が反転するだけで補数が得られますので、補数化回路は簡単ですが、N を引き去るのは簡単ではありません。この補数は「1の補数 1's complement」といいます。