 
1.加算回路と減算回路
(かさん かいろ と げんざん かいろ)
2進数1桁の足し算では、すべての組み合わせは4とおりです。
足した結果には、1桁目の値と、桁上がりの値が必要です。
これを表にしてみましょう。
表1-1 2進数1桁の加算
A |
B |
1桁目 |
桁上がり |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1桁目と桁上がりを論理式で表現できないかを考えてみましょう。
AND、OR、NOTなどを使って、整理したものが表1-2です。
表1-2 加算を論理式で表現
A |
B |
C = A and B |
D = A or B |
E = not C |
F = D and E |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
|
|
(桁上がり) |
|
|
(一桁目) |
一桁目の部分は、A=Bのとき0、 A≠1のとき1となっています。
この演算を排他的論理和「EXOR(Exclusive OR)」とも呼び、
等しくないことを示す演算子でもあります。
 
表1-2から、1ビットの加算回路は次のようになることがわかるでしょう。

図1-1 1ビット加算器
1ビット以上になると、最下位ビット以外は、
下位からの桁上がりを更に加算しなければなりません。
だから、図1-2のように1ビット加算器が並ぶことになります。
(注意) 一般にNビットの加算では、N×(N+1)/2個の
1ビット加算器が必要となります。
図1-2では、Aの各ビットをAn、Bの各ビットをBn、
結果をCnと表記しています(n=0〜3)。
図1-2 4ビット加算器

10進数の世界で、私たちが引き算を行うとき、下位の桁から順にやります。
桁ごとに、順に大きさを比較し、引かれる数が引く数より大きければ、
そのまま引き、引かれる数が小さければ、上位桁から10借りてきて・・・。
 |
@) 1の位では2<8だから、10の位から10借りてくる。 |
A) 10+2から8を引いて4を1位の値とする。 |
B) 下位から10を借りられたので、7−1=6とする。 |
C) 6−1=5を10の位とする。 |
さて、いかにも複雑ですね。と思う人は少ないでしょうか?
ここでちょっと視点を変えてみます。
今、上位桁から借りてくるのを最初にやってしまいましょう。
まず、100から18を引きます。
答えは82。
この計算は、つり銭の計算でよくやりますから、なれていますね。
この82に72を加えます。
72+82=154
最初,100を借りていたのですから、100を引いて54となります。
154−100=54
答えは、同じく54になりました。
あるいは、2桁の大きい正の値から、
2桁の小さい正の値を引いたのですから、
2桁以上を無視すればよいわけです。
 
1.4 補数(ほすう)
10進法で、計算の対象となっている数より大きい桁を持ち、
最上位が1で後は0の値、1.3の例で言えば100のことですが、
この値から数を引いた値を10の補数と呼びます。
たとえば、18の10の補数は82です。
同様に2進法で、計算の対象となっている数より大きい桁を持ち、
最上位が1で後は0の値から、数を引いた値を2の補数と呼びます。
2進数では0か1しかありませんから、
実は、この値を簡単に求めることができます。
まず、単純に引いて2の補数を求めた値と、
引く数の各桁のビットを反転した値を比較してみましょう。
[単純に引いた値] |
1 0000 0000 − 0000 1101 |
= 1111 0011 |
[ビットを反転した値] |
0000 1101 の各ビット反転 |
= 1111 0010 |
|
|
|
[単純に引いた値]
|
1 0000 0000 ? 0000 1010 |
= 1111 0110 |
[ビットを反転した値] |
0000 1010 の各ビット反転 |
= 1111 0101 |
|
|
|
[単純に引いた値] |
1 0000 0000 ? 0000 0001 |
= 1111 1111
|
[ビットを反転した値] |
0000 0001 の各ビット反転 |
= 1111 1110
|
各桁のビットを反転した値は、
単純に引いた値より1だけ少ない値になっています。
ですから、ビット反転した値に1を加えて補数をつくることができるわけです。
 
ビットの反転はNOTだけの回路です。

図1-3 ビット反転(8ビットのとき)
ビットを反転したあと、1を加算します。
この1の値としては、最下位ビットのみ1、
それ以外は0として加算器に入力すればよいわけです。

図1-4 2の補数回路(8ビットのとき)
補数回路では、A0〜A7の全ビットが 0
のとき、あふれビットが発生します。
 
さて、引く値の2の補数をとり、引かれる値と加算し、
あふれビットを無視すれば、結果的に減算が行われたことになります。

図1-5 8ビットにおける減算回路
 
|