
武蔵野個別指導塾の特徴
【情報I】論理回路を図解で総まとめ—AND・OR・NOT・真理値表・半加算器|武蔵野個別指導塾

AND・OR・NOTの記号と真理値表を対応させ、組み合わせ回路から半加算器まで図でたどります。桁上がりを含む例題と練習問題で、2進法の加算が回路になる仕組みを確かめましょう。
よくあるのは、朝の通学路の坂を上りながら、前日に見た論理回路の問題を思い返し、「1と1を入れるのに、答えが1の回路と0の回路があるのはなぜだろう」と考え込む場面です。ANDもORも加算も、同じ0と1を使います。しかし、入力に対して何を答える装置なのかが違うため、数字だけを追うと区別がつかなくなります。
論理回路で最初に決めるのは、入力と出力が何を表すかです。「両方の条件が成立したか」を答える回路と、「足した結果の下の桁」を答える回路では、同じ入力でも出力は変わります。部品の名前を覚える前に、その部品への質問を言葉にすると、真理値表の意味が見えてきます。
この単元では、基本の論理演算を表にし、その表と回路図を対応させます。さらに、複数の部品を組み合わせ、2進法の加算を実現する半加算器へ進みます。最後には、下の桁から来る桁上がりを含めた全加算器の入口まで、自分で入力を代入して確かめられるようにしましょう。
この単元で身につけること
- 論理値と数値の役割を区別します。0と1を条件の不成立・成立として読む場合と、2進数の各桁として読む場合を切り替えます。
- AND・OR・NOTの真理値表を作ります。名前だけに頼らず、どの入力のときに出力が1になるかを説明します。
- 回路図を入力側から順に読みます。途中の信号に名前を付け、枝分かれと接続を確かめながら出力を求めます。
- XORと半加算器を対応させます。加算の結果を和の下位桁と桁上がりに分け、それぞれに必要な論理演算を選びます。
- 全加算器の3つの入力を追います。下位桁からの桁上がりを加える理由と、複数桁の計算へつながる仕組みを理解します。
前に学んだ2進法の位取りや、プログラムの条件分岐で使う「かつ」「または」「でない」が、この単元の土台になります。表・式・図は別々の知識ではなく、同じ入出力の関係を別の形で書いたものです。表で確かめた結果を図に戻す練習をすると、見慣れない配置の回路にも対応できます。
基本の考え方
0と1で条件を表す
論理演算は、真か偽かという2つの値を扱う演算です。ここでは真を1、偽を0と表します。例えば、Aを「利用の申請がある」、Bを「担当者の確認が済んでいる」とすると、A=1、B=0は、申請はあるものの確認が済んでいない状態を意味します。1を「良い」、0を「悪い」と読むわけではありません。何が成立した状態を1とするかは、問題文で決まります。
論理回路は、こうした論理演算を行う回路です。実際の電子回路では電圧の状態などを0と1に対応させますが、ここでは信号を理想的な0または1として扱います。図中の線は信号の経路であり、線の長さを計算に使うものではありません。また、NOTを通って0になった信号も、回路から消えたのではなく、値0を持つ信号として次の部品へ進みます。
入力のあらゆる組み合わせと、それぞれに対応する出力を並べた表が真理値表です。入力がAの1つなら0と1の2通り、AとBの2つなら00、01、10、11の4通りあります。入力が3つなら2³=8通りです。各入力が独立に0と1を取れるとき、入力がn個なら2ⁿ通りになります。見落としを防ぐため、入力欄を2進数の小さい順にそろえると便利です。
AND・OR・NOTの表と記号
ANDは論理積で、「AかつB」に対応します。入力が両方とも1のときだけ出力が1になります。先ほどの条件なら、申請と確認の両方がそろったときに利用可能とする判断です。どちらかに0があれば条件がそろわないので、出力も0になります。
ORは論理和で、「AまたはB」に対応します。少なくとも一方が1なら出力が1になります。「または」を、日常会話の二者択一だけで解釈しないようにしましょう。論理演算のORでは、両方が1の場合も含めて出力が1です。例えば2つの通知ボタンのうち、どちらかが押されれば通知する仕組みなら、両方が押されても通知します。
| 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つの演算です。入力0なら出力1、入力1なら出力0になります。「停止条件が成立していない」を表すなら、停止条件をAとしてNOT Aと書けます。「反対にする」とは0と1を入れ替えることであって、数に負号を付けることではありません。
| A | NOT A |
|---|---|
| 0 | 1 |
| 1 | 0 |
図1のように、論理回路では演算ごとに異なる形の記号を使います。ここでは左から入力し、右へ出力する描き方にそろえています。ANDは左側が直線で右側が丸い形、ORは入力側も曲線になった形、NOTは三角形の先に小さな丸が付いた形です。図の中の英字は演算名を確認するためのラベルです。

NOTの先の小さな丸は、否定を表す印です。配線の接続を示す塗りつぶした点とは役割が異なります。回路記号には別の表し方もあるため、問題に記号の説明があるときは、その定義に従います。絵の印象だけで演算を決めず、表と結び付けて読むことが確実です。
部品をつなぐと複合した条件になる
複数の論理ゲートをつなぐと、複合した条件を処理できます。現在の入力の組み合わせによって出力が決まる回路を、組み合わせ回路といいます。信号の伝わり方を順に計算しますが、過去の入力を記憶しているという意味ではありません。記憶を含む回路は、この単元の組み合わせ回路とは区別します。
例えばY=(A AND B) OR (NOT C)は、「AとBが両方1である、またはCが0である」ときにYが1になる関係です。最初から長い式全体を暗算せず、P=A AND B、Q=NOT Cと名前を付けると、最後はY=P OR Qになります。かっこの範囲が、そのまま先に計算する部分を示しています。
Pythonでも、0と1に限定した入力を使って真理値表を確かめられます。次の例では、andとorが返す値をintで整数にして表示します。Pythonのandやorは一般には入力の値を返す演算でもあるため、ここでは入力を0と1に限定している点を押さえてください。
for a in (0, 1):
for b in (0, 1):
print(a, b, int(a and b), int(a or b))
出力は次のとおりです。左からA、B、ANDの結果、ORの結果が並びます。
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 1
プログラムの実行結果と手書きの表が違ったら、まず入力の並び順を確かめます。行が並び替わっているだけなら、演算の違いではありません。同じ入力の行同士を比較することが、表を照合するときの基本です。
例題で解き方を確かめる
例題1 途中の列を作って真理値表を完成させる
Y=A AND (NOT B)の真理値表を作り、Yが1となる入力を答えましょう。「Aが成立し、Bが成立していない」という条件です。
- 入力を00、01、10、11の4通りに並べます。まず入力だけをそろえると、重複と抜けを防げます。
- NOT Bの列を作ります。Bだけを反転させるので、Aの値をこの段階で使う必要はありません。
- AとNOT BにANDを適用します。両方が1になる行を探すと、出力を確定できます。
| A | B | NOT B | Y |
|---|---|---|---|
| 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 0 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 0 |
途中のNOT Bを省くと、否定をAにも掛けてしまう誤りが起こりやすくなります。長い式であっても、一度に考える入力を各ゲートの分だけに絞ると、表を着実に埋められます。
答え:入力00、01、10、11に対するYは順に0、0、1、0で、A=1、B=0のときだけ1です。
例題2 3入力の組み合わせ回路を読む
図2の回路について、A=1、B=0、C=0のときの出力Yを求めましょう。また、すべての入力について真理値表を完成させます。

図2では、AとBがANDへ入り、CはNOTへ入ります。その2つの出力が最後のORへ入るので、式はY=(A AND B) OR (NOT C)です。図の上下をまとめて一度に読む必要はなく、2本の経路をそれぞれ確かめれば十分です。
- ANDの出力をPと置きます。A=1、B=0なのでP=0となり、上側の経路の値が決まります。
- NOTの出力をQと置きます。C=0を反転するのでQ=1となり、下側の経路の値が決まります。
- PとQをORへ入れます。0 OR 1=1なのでY=1です。同じ手順を8通りの入力に適用します。
| A | B | C | P | Q | Y |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 | 1 |
| 0 | 0 | 1 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 | 1 | 1 |
| 0 | 1 | 1 | 0 | 0 | 0 |
| 1 | 0 | 0 | 0 | 1 | 1 |
| 1 | 0 | 1 | 0 | 0 | 0 |
| 1 | 1 | 0 | 1 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 | 1 |
C=0の4行ではQ=1になるため、AとBにかかわらずY=1です。一方、C=1の4行ではQ=0なので、YはPと同じ値になります。このように入力の一部を固定して考えると、完成した表に不自然な行がないか確認できます。
答え:指定の入力ではY=1で、入力000から111の順の出力は1、0、1、0、1、0、1、1です。
例題3 半加算器の2つの出力を求める
1桁の2進数AとBを加える回路を考えます。和の下位桁をS、次の桁への桁上がりをCとし、それぞれの真理値表と演算を求めましょう。
- 先に普通の加算を行います。0+0=0、0+1=1、1+0=1、1+1=2です。回路の名前から推測するより、必要な出力を決めることが先です。
- 結果を2進法の2桁で表します。順に00、01、01、10となり、左の桁がC、右の桁がSです。
- CとSを別々に真理値表へ移します。Cは両入力が1のときだけ1なのでANDで求められます。Sは入力が異なるときだけ1になります。
| A | B | C | S | 結果の2進表記CS |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 00 |
| 0 | 1 | 0 | 1 | 01 |
| 1 | 0 | 0 | 1 | 01 |
| 1 | 1 | 1 | 0 | 10 |
入力が異なるときだけ1になる演算をXOR、排他的論理和といいます。2入力なら「ちょうど一方だけが1」と言い換えられます。ORとの違いは、A=B=1の行です。ORは1になりますが、XORは0になります。
半加算器は、このSとCを出力する回路です。数値として確認すると、すべての入力でA+B=2×C+Sが成り立ちます。1+1のときにSが0でも計算結果が0になったわけではなく、Cの1が2の位を表しています。
答え:S=A XOR B、C=A AND Bで、A=B=1ならC=1、S=0です。
例題4 全加算器で下位桁からの桁上がりを受け取る
全加算器はA、Bに加え、下位桁から来た桁上がりCinを入力とします。A=1、B=0、Cin=1のとき、和の下位桁Sと出力の桁上がりCoutを求めましょう。
- 最初の半加算器でAとBを加えます。途中の和をT、桁上がりをC1とすると、T=1、C1=0です。まず2つの入力を処理して、次に足す値を用意します。
- 2つ目の半加算器でTとCinを加えます。1+1なのでS=0、途中の桁上がりC2=1になります。これで3つ目の入力を取り込めます。
- C1とC2をORでまとめてCoutを求めます。0 OR 1=1なのでCout=1です。どちらかの段階で桁上がりが出れば、次の桁へ1を渡します。
式で書くとT=A XOR B、S=T XOR Cin、Cout=(A AND B) OR (T AND Cin)です。C1=1ならA=B=1なのでT=0となり、C2は0です。したがって、この構成ではC1とC2が同時に1になることはありません。桁上がりをORでまとめる理由も、途中の関係から説明できます。
答え:S=0、Cout=1で、加算結果は2進法で10です。
全加算器全体の真理値表も確かめておきましょう。入力の合計は最大3で、2進法では11です。出力を読むときは、Coutが上位、Sが下位の順になります。
| A | B | Cin | Cout | S |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 1 |
例えば2進数の11と01を加えるなら、最下位桁は1+1でS=0、桁上がり1です。次の桁は1+0にその1を加えるので、再びS=0、桁上がり1になります。最後の桁上がりを左端に書くと結果は100です。下位の出力を上位の入力につなぐことが、筆算で行っていた桁上がりに対応します。
つまずきやすいところと直し方
ORを加算やXORと混同する
誤った書き方は「1 OR 1=10」や「1 OR 1=0」です。前者は2進法の加算と、後者はXORと混同しています。ORが答えるのは「少なくとも一方が1か」という1つの判定であり、2桁の計算結果ではありません。
正しい書き方は「1 OR 1=1」です。対して、加算なら1+1=10(2進法)、XORなら1 XOR 1=0です。すべてを「足す」と覚えると区別できなくなるため、演算名を見たら、どの条件で1を返すかを短い言葉で添えましょう。
図3のように、半加算器では同じAとBをXORとANDの両方へ渡します。XORの記号はORに似ていますが、入力側に曲線がもう1本あります。図の塗りつぶした点は分岐の接続点で、線が交差していても点のない場所では接続しないという約束で描いています。

図3の上側のSだけを見て、計算全体の答えにしないことが大切です。下側のCと合わせてCSの順に読むと、2進法の加算結果になります。図に信号を書き込むなら、A=B=1のときに上側0、下側1となることを確かめてください。
Pythonでは、0と1の入力に対するXORを「等しくない」という比較でも確かめられます。次の例はCとSを分けて表示し、最後に通常の整数として結果を読み戻します。
for a in (0, 1):
for b in (0, 1):
s = int(a != b)
c = int(a and b)
print(a, b, c, s, 2 * c + s)
左からA、B、C、S、読み戻した数値の順で、出力は次のようになります。
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 0 2
最後の列の2は10進法で表示した値です。真理値表の出力に2が現れたのではなく、CとSという2つのビットを数値へ戻した結果だと区別します。
否定の範囲を勝手に広げる
誤った書き方は「NOT (A AND B)=(NOT A) AND (NOT B)」です。かっこの中を計算した後で否定することと、それぞれを否定してANDを取ることは異なります。A=1、B=0を代入すると、左辺は1、右辺は0になり、同じ式でないことがわかります。
正しい書き方は「NOT (A AND B)=(NOT A) OR (NOT B)」です。「両方成立するわけではない」とは、「少なくとも一方が成立しない」ことだからです。同様にNOT (A OR B)=(NOT A) AND (NOT B)も成り立ち、これらをド・モルガンの法則といいます。式を変形する際には、否定の位置だけでなくANDとORの入れ替わりも確かめます。
XORも基本の3演算で表せます。A XOR B=(A AND (NOT B)) OR ((NOT A) AND B)と書けば、前半はAだけが1、後半はBだけが1の場合です。この2つの条件のORなので、両方1の行を含まないことが式からも読み取れます。
半加算器に桁上がりの入力があると思い込む
誤った書き方は「半加算器にA、B、Cinを入れる」です。半加算器の入力は2つなので、下位桁からの桁上がりを独立した3つ目の入力として受け取れません。「半」という名前は、結果が半分になることを意味するものではありません。
正しい書き方は「AとBの2入力を加えるのが半加算器、AとBとCinの3入力を加えるのが全加算器」です。多桁の加算では、下位から届く桁上がりを扱う必要があります。最下位桁に外からの桁上がりがない場合は半加算器を使えますし、全加算器のCinを0にしても同じ加算ができます。
次のPythonの例では、全加算器の式で全8通りを計算します。途中のtを残すことで、半加算器を2段に分けた計算と照合できます。
for a in (0, 1):
for b in (0, 1):
for cin in (0, 1):
t = int(a != b)
s = int(t != cin)
cout = int((a and b) or (t and cin))
print(a, b, cin, cout, s)
左からA、B、Cin、Cout、Sの順で、出力は次のとおりです。
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1
表の行を読む際には、入力側のCinと出力側のCoutを取り違えないようにしましょう。名前が似ていても、Cinはこれから加える値、Coutは加算した結果として次の桁へ渡す値です。
練習問題
途中の信号を省かずに、表か短い式を残して解いてみましょう。答えの0と1が合っただけでなく、その値が和なのか桁上がりなのかまで説明できれば、回路の読み方を確かめられます。
練習1
入力A、Bを00、01、10、11の順に並べ、Y=NOT (A OR B)の出力を答えてください。ORの出力を先に1列書いてから、全体を否定します。
練習2
Y=(A OR B) AND (NOT C)について、Yが1になる入力ABCをすべて答えてください。まずNOT Cが1になる条件を決め、その条件の下でA OR Bを調べましょう。
練習3
半加算器にA=0、B=1を入れたときのCとSを答えてください。また、半加算器でC=1、S=1という出力は生じるか、入力の合計から説明してください。
練習4
2進数の101と011を加えます。最下位桁のCinを0として、各桁を全加算器で処理したときのSとCoutを、下の桁から順に答えてください。最後に、全体の和を2進法で書きましょう。
答えと解説
練習1の答えは、順に1、0、0、0です。ORの出力0、1、1、1を反転させます。「少なくとも一方が1」の否定なので、両方が0のときだけ出力が1になります。
練習2の答えはABC=010、100、110です。最後がANDなので、NOT C=1、つまりC=0が必要です。そのうえでAとBの少なくとも一方が1となる01、10、11を選びます。例題2とはANDとORの配置が違うため、同じ入力でも出力が一致するとは限りません。
練習3の答えはC=0、S=1です。また、C=1、S=1は生じません。この組み合わせは数値として2×1+1=3ですが、半加算器の2つの入力の合計は最大2だからです。全加算器なら3つの入力がすべて1のときに生じます。
練習4の答えは、下の桁から順に(S, Cout)=(0, 1)、(0, 1)、(0, 1)で、全体の和は1000です。最初は1+1+0、次は0+1+1、最後は1+0+1を計算します。3つのSを並べた000の左に、最後のCoutである1を付けます。10進法でも5+3=8となり、結果を確かめられます。
次の単元へのつながりと家庭での確かめ方
論理回路の考え方は、CPUの内部で計算や条件の判定を行う仕組みにつながります。また、センサーから受け取った信号を組み合わせて出力を決める制御にも応用できます。ただし、論理演算の結果が正しいことと、装置全体が目的どおりに動くことは同じではありません。入力の意味をどう決めるかまで含めて考える必要があります。
家庭で5分ほど使うなら、1つ目は、紙に00、01、10、11を書き、AND・OR・XORの3列を埋める確かめ方です。両方1の行を横に比較し、それぞれの違いを声に出して説明してみましょう。保護者の方がお子さまと確認するときも、速さより「何を判定する列か」を聞くと、混同している演算を見つけやすくなります。
2つ目は、2桁の2進数を2つ選んで足し、各桁の入力と出力を表にする方法です。筆算の桁上がりをCinとCoutという名前に置き換え、A+B+Cin=2×Cout+Sが各桁で成り立つか確認します。個別指導では、表の行をそろえるところで止まるなら0と1の組み合わせに、結果の桁を読めないなら2進法の位取りに戻って確かめます。
まとめ
回路図を読めたかどうかは、見慣れた記号の名前を言えるかだけでは決まりません。入力を変えたときの出力を表で説明でき、その出力が表す条件や桁の意味まで言葉にできることが、次の計算を組み立てる土台になります。
途中で迷ったら、ゲートの出力に1文字の名前を付けてください。その1列が、複雑に見えた配線を、自分で確かめられる小さな演算に分けてくれます。半加算器のSが0でも、Cまで見れば1+1の答えは失われていません。論理回路の理解は、0と1の行き先に意味を与えられたところから始まります。
本気になった日が、入塾の日。
お子様の教育、迷ったら「丸投げ」してください。必ず、期待以上の結果で返します。武蔵野で育む、武蔵境で学ぶ。
電話は年中無休。365日、24時間、お電話可能。




