半加算器と全加算器
加算器には、下位からの桁上がりを考慮しない反加算器と、それも考慮する全加算器とがあります。

さて、ようやく「記号の説明」ではなくて、実際の計算処理めいた項目にまでたどり着きました。これまでに紹介してきた論理回路たちを使って、「どのように2進数の計算処理を行うのか」の仕組みにふれていきましょう!
といっても、「足し算とはどんな概念だから・・・」なんてことを作り込むわけじゃありません。「(2進数の場合)1と1を足せば10になる」のは明確なんですから、同じ入力を与えた時に、同じ出力が得られるよう論理回路を組み合わせてやれば、疑似的に加算処理が行えますよね・・・という理屈になってます。
え?半加算器と全加算器の役割の違いというか意味がよくわからない?では、半加算器、全加算器というブラックボックスを紐解いていきましょう。
半加算器は、どんな理屈で出来ている?
半加算器を理解するにあたり、まずは2進数の1桁(ビット)同士で行われる足し算に、どんなパターンがあるかを考えてみましょう。
足し算の結果を全て同じ桁数に揃えてみると、「00、01、01,10」という数字が並びます。
さて、それではここで入力値と、出力C(2桁目の数)と出力S(1桁目の数)の関係をちょっと真理値表にまとめてみることにします。
実は出力Cの真理値表は論理積(AND)の真理値表に等しく、出力Sの真理値表は排他的論理和(EOR、XOR)と等しくなっているのです。
というわけなので、1桁目と2桁目の出力を得るための回路というのは、次のようになるわけですね。あとは、その2つの回路をくっつけることで、みごと半加算器の出来上がりです。
このように、半加算器というのは、論理積回路(AND回路)と排他的論理和回路(EOR、XOR)を組み合わせることによって、作ることが出来るのです。
全加算器は、どんな理屈で出来ている?
続いては全加算器です。次のような計算を考えた場合、2桁目以降は下位の桁から繰り上がって来る可能性がありますから、半加算器では対応できません。2桁目以降は全加算器が必要となるわけです。
そのため、全加算器は3つの入力を受け付ける必要があります。
「入力A+入力B+入力C(桁上がりしてきた数)」ができなきゃいけないわけです。
それでは、どんな回路でこれが実現できるのか考えてみましょう。まずはじめに考えるのが「入力A+入力B」の部分。はい、その通りです。では今度はその結果に、残りの「+入力C(桁上がりしてきた数)」という部分の計算をくっつけるには、どうすれば良いでしょうか。
普通に足し算で考えると、1桁目にそのまま足すのが常識ですよね。すると今度は「出力S+入力C」という足し算をやりましょう。これに必要な回路はさぁなんでしょう?
最後に出力Cをひとつにまとめれば、全加算器の出来上がりというわけです。
このように、全加算器というのは、半加算器と論理和回路(OR回路)を組み合わせることによって、作ることが出来るのです。
ビット操作とマスクパターン
論理演算を用いると、このようなビット操作も簡単に行うことができるのです。
思い返してみれば本記事の「電気のオンオフ」にはじまって、やれ2進数だとか論理演算だ回路だなんだとややこしい話をしながら、ようやく「コンピュータが足し算できる仕組み」というところまでたどり着きました。
たとえば8ビットの2進数同士を足し算できる回路を作りたいと思ったら、半加算器1つと全加算器7つをつなげてやれば出来ちゃう・・・というところまでは理解できたわけです。たぶん、きっと理解できたはずです!
さて、ここでさらにこれまで習ったことを振り返ってみましょう。「コンピュータは回路をシンプルに保ちたいから、足し算の理屈で引き算もやっちゃうんですよねー」という話がありましたよね。つまり、2の歩数を作ることができれば、引き算できる回路も「作り方見切ったり」と言えるはずです。
でも、どうやって作るんでしょう?「反転させて1を足す」というけど、反転って具体的にはどんな回路でどうやるの?実はこれも、論理演算であっさりできちゃったりするんです。
ビットを反転させる
ビットを反転させるには、排他的論理和(EOR、XOR)を用います。ちなみに、「ビットを反転させたい位置に1を入れたビット列」のことをマスクパターンと呼びます。



