公開

論理回路とは?AND・OR・NOTと真理値表、半加算器まで図解

文:野澤 嘉孝 (ソフトウェアエンジニア/プログラミングスクール Sandbox 代表)

論理回路とは?AND・OR・NOTと真理値表、半加算器まで図解

この記事の概要

スイッチを入れるか、切るか。それだけで、どうしてパソコンは足し算までできるのでしょうか? 論理回路は、0と1で表した情報を、決められたルールで処理する回路です。 基本のルールを組み合わせると、条件の判定だけでなく、足し算もできます。 先に結論:条件を組み合わせると、計算ができる

スイッチを入れるか、切るか。それだけで、どうしてパソコンは足し算までできるのでしょうか?

論理回路は、0と1で表した情報を、決められたルールで処理する回路です。

基本のルールを組み合わせると、条件の判定だけでなく、足し算もできます。

先に結論:条件を組み合わせると、計算ができる

  • AND=両方が1なら1。 「AかつB」。
  • OR=少なくとも一方が1なら1。 両方が1でも1。
  • NOT=0と1を反転する。 0なら1、1なら0。
  • 真理値表=入力を全通り試し、出力を並べた表。 複雑な回路も途中の値から順に調べられる。
  • 足し算は、和と桁上がりを分けて作る。 2つの1ビットの足し算では、和をXOR、桁上がりをANDで求める。

今回は、現在の入力の組み合わせで出力が決まる「組合せ論理回路」を扱います。AND・OR・NOTから始めて、足し算の回路へ進みましょう。

部室のスイッチは、つなぎ方で性格が変わる

放課後の部室。テッパン先輩が机に置いたのは、豆電球と2つのスイッチでした。

ユウキが片方だけを入れても、電球は暗いまま。両方を入れると、ぱっと点灯します。先輩が配線をつなぎ替えると、今度は片方だけで点灯しました。

ユウキ「同じ部品なのに、つなぎ方だけで変わるんですね」

テッパン先輩「そう。この先に、足し算がある」

Sandy「いきなり話が飛んだように見えるやろ。でも、この条件の違いが出発点やねん」

スイッチが直列なら、両方が閉じないと道がつながりません。並列なら、一方でも閉じれば通り道ができます。

直列のスイッチは両方が閉じたとき、並列は少なくとも一方が閉じたときに通り道ができる概念図

直列はAND、並列はORの条件を考えるモデルになる。

スイッチの例では、入れる=1、切る=0、点灯=出力1、消灯=出力0と対応させます。条件の判定なら「成り立つ=1、成り立たない=0」です。

実際の電子回路では、信号の電圧の高低を0・1に対応させます。ここでは低い電圧を0、高い電圧を1とする正論理を想定します。0・1は「電流が流れていない/いる」と同じ意味ではありません。

AND・OR・NOTは、それぞれ何をする?

2つの入力をA・B、出力をYとします。NOTだけは入力を1つ使います。

名前

日本語

出力が1になる条件

AND

論理積

A・Bが両方1

OR

論理和

A・Bの少なくとも一方が1

NOT

否定

入力Aが0

ANDは「かつ」、ORは「または」に対応します。NOTは0を1、1を0に入れ替える操作です。

Sandy「ANDは両方そろったら1。ORは片方でも、両方でも1。NOTはひっくり返す。まずはこの違いや」

ORの「または」は、両方を含む

「ドリンクはコーヒーまたは紅茶から1つ」と言われたら、普通は片方を選びます。でも、論理和のORはA=1、B=1でも出力1です。

「少なくとも一方」と言い換えると、両方が1の場合を忘れにくくなります。日常語の「または」は文脈で意味が変わるため、問題では条件を確認しましょう。

なお、記号で書く論理回路では、ANDはDのような形、NOTは三角形の出口に小さな丸が付いた形などが使われます。出力側の小さな丸は反転の印です。今回の接続図は、流れを読みやすくするため、名前入りの長方形で表した論理ブロック図を使っています。

真理値表は「入力を全部試した表」

真理値表とは、入力の全組み合わせと、それぞれに対応する出力を並べた表です。 2入力なら、00・01・10・11の4通りを試します。

ANDとORの2入力4行の真理値表と、NOTの1入力2行の真理値表

入力を全部並べると、AND・OR・NOTの違いを確かめられる。

A

B

A AND B

A OR B

0

0

0

0

0

1

0

1

1

0

0

1

1

1

1

1

NOTの表は、入力が1つなので2行です。

A

NOT A

0

1

1

0

0か1を取る独立した入力がn個あれば、組み合わせは2のn乗通り。3入力なら8行です。入力欄を2進数を数える順に書くと、抜けや重複を防げます。行の順番自体が定義なのではなく、全組み合わせをそろえることが大切です。

複数のゲートは、途中の出力を順に求める

Y=(A OR B) AND (NOT A)なら、いきなり答えを出そうとせず、途中の列を作ります。

A

B

A OR B

NOT A

Y

0

0

0

1

0

0

1

1

1

1

1

0

1

0

0

1

1

1

0

0

たとえばA=1、B=1なら、次の順に追います。

  1. A OR B は、少なくとも一方が1なので 1。
  2. NOT A は、Aの1を反転して 0。
  3. 最後は 1 AND 0 なので、Y=0。

表を全部見ると、Yが1になるのはA=0、B=1のときだけです。つまり、この回路は「Aではなく、Bである」という条件を判定しています。

ユウキ「途中の値を書いていいんですね」

Sandy「むしろ書いたらええねん。頭の中だけで配線せんでええ」

NAND・NOR・XORは、どこが違う?

NANDはANDの出力を反転したもの、NORはORの出力を反転したものです。名前が増えても、別々に丸暗記する必要はありません。

一方、2入力のXOR(排他的論理和)は「片方だけ1なら1」。入力が違えば1、同じなら0になります。

NAND、NOR、2入力XORの出力を4通りの入力で比較した真理値表

NANDとNORは出力の反転、XORは片方だけ1のとき1。

A

B

NAND

NOR

XOR

0

0

1

1

0

0

1

1

0

1

1

0

1

0

1

1

1

0

0

0

ORとXORは、00・01・10の3行が同じです。違いは11の行で、ORは1、XORは0になります。

ただし、「11の行だけ見れば何のゲートでも分かる」わけではありません。 ANDもORも11では1です。ANDとORを見分けるには、01または10の行を確かめます。

ド・モルガンの法則:全体を否定するとどうなる?

たとえば「学生証と入場券の両方が必要」な受付を考えましょう。入れないのは、学生証がない、または入場券がないときです。両方とも持っていない場合だけが、入れない条件ではありません。

このように「AとBが両方そろう」の否定は、「Aがない、またはBがない」です。

これを式で整理するのが、ド・モルガンの法則です。

全体の否定を各入力へ移すとANDとORが入れ替わる2つのド・モルガンの法則

否定を内側へ移すときは、各入力の否定と演算の入れ替えをセットにする。

  • NOT(A AND B) = (NOT A) OR (NOT B)
  • NOT(A OR B) = (NOT A) AND (NOT B)

全体のNOTを各入力へ移すときは、それぞれを否定し、ANDとORも入れ替えるのがポイントです。単に入力を反転するだけでは、元の式と同じ意味になりません。

もう一方の法則も、受付の例で考えられます。「学生証か入場券の少なくとも一方があればよい」なら、入れないのは学生証もなく、入場券もないときです。

覚えるときは、全体のNOTを内側へ移す → 各条件を否定する → ANDとORを入れ替える、をセットにしましょう。

身近な条件を、論理式に翻訳してみる

仕組みの一部を簡略化すると、身近な装置や検索の条件も論理式で表せます。

簡略化した条件

論理式

扉が閉じていて、かつ、行き先が指定されていれば運転を許可

扉が閉じている AND 行き先が指定されている

煙を検知した、または、通報ボタンが押されたら警報

煙を検知 OR ボタンが押された

Aという語を含み、Bという語を含まないページを選ぶ

Aを含む AND NOT(Bを含む)

実際のエレベーターには、ほかの安全条件や動作の順序もあります。この表だけが実機の制御仕様という意味ではありません。

また、「検索でBを除く」は、探したい集合も含めてA AND NOT Bと表すと正確です。検索サービスごとの入力記法とは分けて、条件の意味を考えましょう。

論理の条件はプログラムにも登場しますが、if文という制御構造と、電子回路である論理回路は同じものではありません。「条件の判定」という共通点から理解をつなげます。

半加算器:XORとANDで1+1を作れる

最初の謎に戻りましょう。2進法で1+1の結果は10です。値は10進法の2と同じで、2進法では「その桁が0、1つ上の桁が1」と書きます。

入力A・Bはそれぞれ1ビットですが、足し算の結果には最大2ビットが必要です。右の桁をS、左の桁をCとして、出力を分けます。

  • その桁の和Sが1になるのは、A・Bの片方だけが1のとき → XOR
  • 桁上がりCが1になるのは、A・Bが両方1のとき → AND

同じ入力をXORとANDへ分岐させた回路が、半加算器です。

AとBをXORとANDに分岐し、和Sと桁上がりCを出す半加算器と真理値表

和SはXOR、桁上がりCはANDで求める。

A

B

桁上がりC

その桁の和S

結果をCSの順で読む

0

0

0

0

00

0

1

0

1

01

1

0

0

1

01

1

1

1

0

10

Sandy「足し算を、『その桁が1になる条件』と『くり上がる条件』に書き直したんや」

ユウキ「計算を、条件の組み合わせに翻訳したんですね」

XORも、(A AND NOT B) OR (NOT A AND B) と表せます。「Aだけ1」または「Bだけ1」という意味です。

このようにAND・OR・NOTを組み合わせれば、有限個の0・1の入力に対して出力を決める、どんな論理のルールも表せます。物語の加算器にも各論理を実現する部品を使います。手動スイッチ2つの直列・並列だけで、すべて作れるという意味ではありません。

全加算器:「半」は何が足りないのか

半加算器の入力はA・Bの2つだけ。下の桁から来る桁上がりを受け取れません。 その入力Cinも受け取れるのが全加算器です。

全加算器は、半加算器2つとOR1つで作れます。

2つの半加算器でA、B、Cinを処理し、桁上がりをORでまとめる全加算器

半加算器2つとOR1つで、下の桁からの桁上がりも受け取れる。

  1. 半加算器①でA・Bを足し、中間の和Pと桁上がりC1を求める。
  2. 半加算器②でP・Cinを足し、その桁の和Sと桁上がりC2を求める。
  3. C1 OR C2を、次の桁へ渡す桁上がりCoutにする。

たとえばA=1、B=1、Cin=1なら、次のように進みます。

  1. 最初の1+1で、P=0、C1=1。
  2. PにCinを足して0+1なので、S=1、C2=0。
  3. 桁上がりは C1 OR C2、つまり 1 OR 0 なので、Cout=1。

結果をCout・Sの順に読むと、2進法の 11。10進法の3で、1+1+1の答えになっています。

ある桁のCoutを次の桁のCinへつなげば、複数桁の足し算へ広げられます。実際に作った回路の桁数には限りがあり、固定桁数の結果に収まらない場合は、桁上がりやオーバーフローの扱いも考える必要があります。

オリジナル学習例:警報の条件を組み立てよう

以下はこの記事独自の学習例です。実際の共通テスト問題ではありません。

A=煙を検知した、B=通報ボタンが押された、M=点検モードである、とします。「煙かボタンの少なくとも一方で警報を出す。ただし、点検モード中は警報を出さない」という簡略化した条件を、論理式で表してください。

答えは、 Y=(A OR B) AND (NOT M) です。

A=1、B=1、M=0なら、ORは1、NOT Mも1なので警報は1。A=1でもM=1なら、最後のANDの片方が0になり警報は0です。

XORを使うと、煙の検知とボタン操作が同時に起きたときに警報が0になるため、条件に合いません。日常語から式へ移すときも、「両方ある場合」を試すと誤りを見つけやすくなります。

※条件を学ぶための架空のモデルであり、実際の防災設備の設計を示すものではありません。

まとめ:記号で迷ったら、真理値表へ戻る

  • ANDは両方1、ORは少なくとも一方が1、NOTは反転。
  • 真理値表は全入力の組み合わせを書く。独立したn入力なら2のn乗行。
  • NAND・NORは出力の反転。2入力XORは片方だけ1のとき1。
  • 半加算器はS=A XOR B、C=A AND B。
  • 全加算器は下の桁からの桁上がりも受け取る。

部室の机で、ユウキはXORとANDの部品を使った加算器を試します。片方の入力が1なら、右の表示だけが点灯。両方1なら右が消え、左が点灯しました。

ユウキ「……1たす1。ちゃんと、10になってる」

最初は点いたり消えたりしていただけの仕組みが、数を計算する仕組みになりました。論理回路を学ぶと、0と1の組み合わせから計算が生まれる道筋を説明できるようになります。

ほかのテーマは情報Ⅰサバイバルの記事一覧から読めます。仕組みを学んで実際のプログラムや作品制作にも挑戦したい方は、プログラミングスクールSandboxもご覧ください。

参考資料

あわせて読みたい記事

Sandboxのサポート内容 Sandboxの情報Ⅰ学習サポートを見る →
共通テスト情報Ⅰのまとめ 共通テスト「情報Ⅰ」対策シリーズの一覧を見る →
野澤 嘉孝

この記事を書いた人

野澤 嘉孝

ソフトウェアエンジニア/プログラミングスクール Sandbox 代表

ソフトウェアエンジニア。同志社大学理工学部を経て、京都大学大学院で核融合発電の基礎研究(プラズマ物理)に従事。高校生向け数学塾の講師、大学での物理実験の授業を通じて延べ500名以上の学生をサポート。現在は業界特化型SaaSの開発に携わりながら、小中高生向けプログラミングスクール Sandbox を運営。

プロフィールと執筆記事の一覧 →

「情報Ⅰ、うちの子はどう対策すればいい?」

情報Ⅰ対策について無料で相談する

志望校の配点を一緒に確認したい方は → 無料の学習相談へ

入会金無料・いつでも退会OK・退会後もいつでも再入会できます