様々な学問/勉強課目をわかりやすく図解したり、シミュレーションツールを用いることで分かりやすく解説するサイトです!
⇒ 本ブログの詳細/制作者プロフィール/連絡先/現在の行動状況はコチラ!
⇒ 本ブログは複数のテーマ(色)を持った階層構造になってます!詳しくはコチラ!
学問全般 経済学/投資 統計学/確率 物理学
  1. ホーム
  2. 〇学問/勉強
  3. コンピュータ/情報科学
  4. コンピューターの原理基礎:足し算を行う基本論理回路をシミュレーターで理解しよう![半加算器/全加算器での1桁2進数計算]
■注目記事一覧

[物理学] 運動量保存の法則をwebシミュレーションで解説!運動エネルギーが保存される条件もわかります!

なぜ全力買い(全額投資)はダメなのか?シミュレーション交えて解説!

投資/賭けの勝率は1/2ではない!強者(資産家)が勝つ市場論理をシミュレーションツールで解説!

なぜ賭け/投資(株式/FX)市場はほとんどの人が勝てないのか?シミュレーションツールで解説!

倍プッシュ(マーチンゲール法)シミュレーションツール!必勝法 倍プッシュの欠点とは!?

サイコロ シミュレーターで解説!確率は一定の値に収束していくが、当たり回数が一定に収束するわけではない!

なぜ渋滞は起きるのか?シミュレーションで解説!
 
スポンサーリンク

コンピューターの原理基礎:足し算を行う基本論理回路をシミュレーターで理解しよう![半加算器/全加算器での1桁2進数計算]

 前回の記事で、計算回路の説明の前段階として、2進数とは何かを説明させて頂きました。結論としては、「10進数との違いはいつ繰り上がるかのルールが違うだけ(2になった時点で繰り上がってしまう)」です。そしてその特徴は「10進数よりも1桁単位の計算パターンが非常に単純になる」にありました。1桁当たりの状態としては「0か、1か、それとも繰り上がりか」の3つしかないんです。
 
 今回はその「0か、1か、それとも繰り上がりか」の3つの場合を計算できる、足し算計算機(加算器)をどうやったら基本回路で実現できるのかを説明します!単純な回路の組み合わせが、人間よりも素早く計算できる高度なマシンとなるのです!

2つの2進数の足し算

まず2進数の足し算のパターンを理解するために、例題として下記の2進数の足し算を行う場合を考えます。(1つ目の数字を青色、2つ目の数字を赤色で以後示していきます)

    1101 + 1110 = ?

この計算についても、10進数と同じように下の位から計算していけばいいのです。下記のように順番の計算していきます。

 1の位: 1 + 0= 1
 2の位: 0 + 1= 1

さて、ここで3の位を計算すると問題が発生します。足し算をすると2となり、前回記事で説明した「繰り上がり」が発生するのです。
 
 3の位: 1 + 1= 2 ⇒ 繰り上がり

この場合は前回の記事と同様に。「3の位は0とし、4の位に1繰り上がり」という扱いをします。

 3の位: 1 + 1= 0 #繰り上がり1

となると4の位は大変です。実は繰り上がってきた値も含めた3つの数字の足し算を行わなければならないのです。

 4の位: 1 + 1 + 1 = 3 ?

そうすると実は「3」という大きな数がでてくるのです!でも、3は2進数でいう「11」なので、下記のようにあらわせます。

 4の位: 1 + 1 + 1 = 1 #繰り上がり1

このように多少複雑なパターンがありますが、1つ目の数字(青色)2つ目の数字(赤色)繰り上がり数字(紫色)の3つの数字の足し算を各桁で行えれば、2進数の計算式は簡単につくれてしまうのです。

繰り上がってきた値を考慮しない、2つの数の加算(半加算器)

 それでは各桁の計算を行う回路を考えていきます。上記の4桁目の繰り上がってきた数がある場合を考えると3つの数となりややこしいので、まずは前の桁から繰り上がりがない場合を考えます(これを半加算器と呼びます)。そうすると、入力1(1つ目の数字)と入力2(2つ目の数字)の1桁の足し算は下記のパターン表で表せます。

入力1 入力2 加算値 繰り上がり値
0 0 0 0
1 0 1 0
0 1 1 0
1 1 0 1

 ここでは加算値とは「合計値、ただし繰り上がりがあった場合はその分を差っ引いた値」を示しています。つまり、「繰り上がりを考慮した、その桁の最終的な加算結果」です。この上記の4つのパターンを回路で表せれば、2進数の各桁の計算は表現できます。それでは、1)繰り上がり値と2)加算値のそれぞれの計算方法を考えていきます。

1)繰り上がり値の計算

 まず簡単な繰り上がり値の計算から説明します。繰り上がり値の計算パターンは下記のとおりです。

入力1 入力2 繰り上がり値
0 0 0
1 0 0
0 1 0
1 1 1

 これってどこかで見たことないですか?繰り上がりがおこるのは、入力1と入力2がともに1のときのみ…そうです以前の記事で説明したAND回路と全く同じパターンなんです!なので、下記のシミュレーターのAND回路で実現できてしまうのです!

 このAND回路だけで繰り上がり値の計算は完了です。

2)加算値の計算

 それでは次に加算値についてです。加算値のパターンは下記のとおりです。

入力1 入力2 加算値
0 0 0
1 0 1
0 1 1
1 1 0

 
 簡単にいうと「入力1と入力2のどちらか1つのみが1の場合に1を出力」するパターンです。このどちらか一方のみ1のとき、1となるものをXOR回路と呼びます。ちょっとOR回路に似ていますよね。OR回路との違いは「入力1と入力2がともに1のとき0となる」ことだけです。ですので、下記のOR回路をうまく使うと、この計算は実現できそうです。

[OR回路]

 このOR回路から「入力1と入力2がともに1のときは0とする」ようにできればいいのです。入力1と入力2がともに1…これって上で説明した「AND回路」の動きですよね!そして、この「AND回路が1のときは、強制的にOR回路の出力を0にする」ことができればこの回路が実現できます。パターンでいうと下記のとおり。

OR回路出力 AND回路出力 加算値
0 0 0
1 0 1
0 1 0
1 1 0

 上記のパターンから「OR回路が1、AND回路が0のときにのみ1を出力するようにする」ことができればいいことがわかりました。
ここで、1つの閃き。AND回路の値を反転させられれば、「OR回路が1、AND回路(反転)が1のときにのみ1を出力するようにする」となり、AND回路の動きに近くなりませんか?パターン表でみてみましょう!

OR回路出力 AND回路後に
NOT回路(反転)
加算値
0 1 0
1 1 1
0 0 0
1 0 0

 これってまさしくAND回路の出力ですよね!この上記の計算過程を回路であらわしたシミュレーターが下記のものです!入力1と入力2をタップで変化させられますので、動きを確かめてください!

[加算値計算回路(XOR回路)]

「入力1と入力2のどちらか1つのみが1の場合に1を出力」ですよね!これを単純化して「XOR回路」と呼び、下記のような記号であらわします。

最終的な半加算器

 まとめです。上記のようにXOR回路ができあがると、半加算器は下記のような単純な回路で表現できます。加算値はXOR回路、繰り上がり値はAND回路で計算できてしまうわけです。

繰り上がってきた値を考慮した全加算器

 それでは、今度は繰り上がってきた値を考慮した全加算器を考えます。今度は下記のように、入力1と入力2とく上がり値の3つの値の計算となります。

入力1 + 入力2 + 繰り上がってきた値 = ?

でもこれって下記のように2つの数の足し算の組み合わせで表せるのです。3つの数の足し算は、2つの数の足し算を2回やれば表現できるからです。

(入力1 + 入力2)= 入力12加算値 #(繰り上げ値1)
(入力12加算値 + 繰り上がってきた値) = 最終加算値 #(繰り上げ値2)

つまり、上記の半加算器を2つ組み合わせれば全加算器は実現できてしまいます!繰り上げ値の考慮に注意が必要です。上記のように、足し算を2回行うので、2つの繰り上げ値がでてしまいます。しかし、計算パターン表を考えると話は単純になります。

 繰り上がり値1が1となる場合 ⇒ 入力1が入力2がともに1 ⇒ 入力12加算値が0 ⇒ 繰り上げ値2は必ず0!

つまり、「繰り上がり値1が1かつ繰り上がり値2がともに1」という面倒な場合はないのです。ですので最終繰り上がり値は下記のパターンであらわせます。

繰り上がり値1 繰り上がり値2 最終繰り上がり値
0 0 0
1 0 1
0 1 1
1 1 起こりえない!

 一番下のパターンは起こりえないので、上3つのパターンをみたした回路で実現できます。これはOR回路で実現できますよね!ということで全加算器の最終的な回路は下記のとおりになります!入力値や繰り上がってきた値をタップで変更できますので、色々と値をかえて試してみてください!

水色の枠でしめしているのが、上記で説明してきた半加算器です。半加算器を2つ使って、3つの数(入力1と入力2と繰り上がってきた値)の足し算をしているわけです。これは実は左の3つの数の1の数をカウントしているだけでもあります。

3つの入力のうち、
1の数
繰り上がり値 加算値
0 0 0
1 0 1
2 1 0
3 1 1

上記のシミュレーターの入力3つをいろいろ変えてみると、このような動きをするのがわかります。そして、上記の表の繰り上がり値を2桁目、加算値を1桁目として2進数をみると、見事に入力の1の数をカウントしているのが分かると思います。(0⇒00、1⇒01,2⇒10、3⇒11という対応関係になってます)。この全加算器を組み合わせることで、どんなに長い数でも足し算ができるようになるんです!ここについては、次回シミュレーターを交えて説明します!

まとめ:どんなに複雑な計算も、AND回路/OR回路/NOT回路で表現できる!

 上記のように色々と回路を交えて説明しましたが、すべてAND回路やOR回路で構成できているのがわかりますよね。XOR回路も途中ででてきましたが、それも上で示したように、AND回路/OR回路/NOT回路の組み合わせで実現できるので、すべてこれらだけで構成できるということなんです!

ということで、次回はこの半加算器/全加算器を用いて実際の長い桁の足し算をしてみます!!

[関連コンテンツ]




お気軽にコメントお願いします!

Your email address will not be published.