NAND で組む回路と組合せ回路の応用
NAND だけで組んだ回路(OR・XOR・2段の NAND)の出力を式で答えられるようになる。あわせて、多数決回路・偶数パリティ回路を選び、7セグメントLEDの表示を16進数から読み取れるようになる。
「NAND だけで作ると?」「この回路と等価なのは?」「16進で出力したら何が光る?」は、形を変えて何度も出る定番問題です。解き方の型が決まっているので、型を覚えた人から確実に1問取れます。
このレッスンで稽古する(用語チェック・過去問)NAND は万能ゲート:NOT・AND・OR を全部作れる
結論:NAND(AND の結果を反転するゲート)を組み合わせるだけで、NOT・AND・OR が全部作れます。 試験では「NAND だけで○○を作ると?」を、式か回路図で聞いてきます。1種類のレゴブロックだけで家も車も組めるようなもの、とイメージしてください。
記号の約束:「・」=AND(論理積)、「+」=OR(論理和)、「¬X」や「X̄」=NOT X(否定)。
| 作りたいもの | NAND だけの式 | なぜそうなるか |
|---|---|---|
| NOT X | X NAND X | 同じ X を2本入れると ¬(X・X)=¬X |
| X AND Y | (X NAND Y) NAND (X NAND Y) | NAND の出力をもう一度 NOT すると、反転が消えて AND が残る |
| X OR Y | (X NAND X) NAND (Y NAND Y) | ¬X と ¬Y を NAND すると ¬(¬X・¬Y)=X+Y |
回路図で1つの入力が NAND の2本の足に両方つながっていたら、それはただの NOT と読み替えてください。2012年の問題(X と Y をそれぞれ NOT にしてから NAND)はまさにこの形で、答えは X+Y です。
ド・モルガンの法則:NAND 2段は「AND どうしの OR」
ド・モルガンの法則は「全体にかかった否定をばらすと、AND と OR が入れ替わる」というルールです。
| 法則 | 式 |
|---|---|
| その1 | ¬(A・B) = ¬A + ¬B |
| その2 | ¬(A+B) = ¬A・¬B |
ここから試験でそのまま使える形が出てきます。1段目の NAND の出力を最後の NAND でまとめる2段の回路は、AND の結果どうしの OR(積和)になります。 つまり ¬(¬(A・B)・¬(C・D)) = A・B + C・D です。否定の否定は消える、と覚えておけば十分です。
NAND 4個で作る XOR(排他的論理和)
**XOR(排他的論理和)**は「2つの入力が違うときだけ 1」を出すゲートです。NAND 4個で作る定番の形があり、図だけ見せて「どれと等価か」を聞かれます。
flowchart LR
A["A"] --> N1["NAND1"]
B["B"] --> N1
A --> N2["NAND2"]
N1 -- "M" --> N2
B --> N3["NAND3"]
N1 -- "M" --> N3
N2 --> N4["NAND4"]
N3 --> N4
N4 --> Y["Y = A XOR B"]
見分け方:1段目の NAND の出力 M が2本に分かれて、A・B と組んで2段目の NAND 2個に入り、最後の NAND でまとめる形なら XOR です。迷ったら A,B に 0,0 と 1,0 を入れて追えば確定します(下の例題)。
3入力多数決回路:Y = A・B + B・C + C・A
3入力多数決回路は「3つのうち2つ以上が 1 なら 1」を出す回路で、式は Y = A・B + B・C + C・A です。「どの2人が賛成しても可決」を、2人組の AND 3つを OR でまとめて表しています。
選択肢を消すときは、真理値表の 000・001・111 を回路に入れてみるのが確実です。
| 選択肢(2018年の問題) | 構成 | 入れてみた結果 | 判定 |
|---|---|---|---|
| ア | AND 3つ → OR でまとめる | 000→0、001→0、111→1 | ○ 表と一致 |
| イ | XOR 3つ → OR でまとめる | 111→0(XOR がすべて 0)、001→1 | × |
| ウ | OR 3つ → AND → 最後に NAND | 000→1(OR がすべて 0、NAND(0,0)=1) | × |
| エ | XOR 3つ → AND → 最後に NAND | 000→1(XOR がすべて 0、NAND(0,0)=1) | × |
「XOR が入っているから不正解」と決めつけるのは危険です。エは 111 を入れると正しく 1 を出すので、000 を入れて初めて誤りだと分かります。
パリティと偶数パリティ検出回路
パリティは、データ中の「1の個数」が偶数か奇数かを見て、伝送中のビット化け(0と1の入れ替わり)を見つける仕組みです。点呼のときに人数が偶数になるよう係を1人足しておけば、1人抜けた時点で奇数になってすぐ気づける、というイメージです。
| 用語 | パリティビットの付け方 | 付けた後の 1 の総数 |
|---|---|---|
| 偶数パリティ | 1の個数が奇数なら 1、偶数なら 0 | 必ず偶数 |
| 奇数パリティ | 1の個数が偶数なら 1、奇数なら 0 | 必ず奇数 |
回路の要点は、XOR をつなげると「1が奇数個のとき 1」になることです。4ビットなら XOR(a,b) と XOR(c,d) をさらに XOR すると奇数検出になり、その後ろに NOT を付けると「0個または偶数個のとき 1」になる偶数検出になります。
7セグメントLED:16進数 → 2進数 → 光るセグメント
7セグメントLEDは、a〜g の7本の棒(セグメント)と小数点(Dt または DP)で数字を表示する部品です。出力ポートの各ビット P0〜P7 が各セグメントにつながっていて、出した16進数でどこが光るかが決まります。このレッスンで一番よく出るテーマです。
配置:a=上、b=右上、c=右下、d=下、e=左下、f=左上、g=中央。数字の形は「5」=a,c,d,f,g、「3」=a,b,c,d,g、「4」=b,c,f,g です。
| 用語 | 共通端子のつなぎ先 | 光るのは |
|---|---|---|
| アノードコモン型 | Vcc(電源のプラス側) | 0 を出したセグメント |
| カソードコモン型 | 接地(GND・マイナス側) | 1 を出したセグメント |
問題文には「出力が 0 のとき点灯」か「1 のとき点灯」が必ず書いてあるので、まずそこに丸をつけます。解く手順は次の4つです。
- 16進を2進に直す(1桁を4ビットに)
- **右端を P0(LSB)、左端を P7(MSB)**として並べる
- 点灯条件に合うビットを拾い、a〜g・Dt に置き換える
- 光るセグメントから数字の形を読む
16進→2進の早見表(よく出る分):0=0000、2=0010、6=0110、9=1001、A=1010、B=1011、D=1101、F=1111。
X OR Y を NAND だけで表す
ア ((X NAND Y)NAND X)NAND Y
イ (X NAND X)NAND(Y NAND Y)
ウ (X NAND Y)NAND(X NAND Y)
エ X NAND(Y NAND(X NAND Y))
解き方と答えを見る
- ド・モルガンの法則で OR を書き換える:X+Y = ¬(¬X・¬Y)
- NOT は同じ入力を2本入れた NAND で作れる:¬X = X NAND X、¬Y = Y NAND Y
- ¬(P・Q) は P NAND Q なので、P=X NAND X、Q=Y NAND Y を入れると (X NAND X) NAND (Y NAND Y)。これはイ
- 検算(X=0, Y=0 のとき OR は 0 になるはず):イは X NAND X=1、Y NAND Y=1、1 NAND 1=0 なので ○
- ほかの選択肢も同じ入力で確かめる。ア:(0 NAND 0)=1 → 1 NAND 0=1 → 1 NAND 0=1 なので ×。エ:0 NAND(何でも)=1 なので ×
- ウは X=1, Y=0 で確かめる:X NAND Y=1、1 NAND 1=0。OR なら 1 のはずなので ×(ウは AND を作る式)
答え:イ:(X NAND X) NAND (Y NAND Y)
NAND 3個の回路の論理式
ア (A+B)・(C+D)
イ A+B+C+D
ウ A・B+C・D
エ A・B・C・D
解き方と答えを見る
- NAND1 の出力は ¬(A・B)、NAND2 の出力は ¬(C・D)
- NAND3 はその2つを NAND するので、X = ¬( ¬(A・B) ・ ¬(C・D) )
- ド・モルガンの法則 ¬(P・Q)=¬P+¬Q を使う:X = ¬¬(A・B) + ¬¬(C・D)
- 否定の否定は消えるので、X = A・B + C・D
答え:ウ:A・B + C・D
NAND 4個の回路を真理値表で追う
ア [図] 入力 A,B の 2 入力 AND 素子(出力 Y)
イ [図] 入力 A,B の 2 入力 OR 素子(出力 Y)
ウ [図] 入力 A,B の 2 入力 XOR(排他的論理和)素子(出力 Y)
エ [図] 入力 A,B の 2 入力 NOR 素子(出力端に○印あり,出力 Y)
解き方と答えを見る
- 記号を決める:M=NAND(A,B)、P=NAND(A,M)、Q=NAND(B,M)、Y=NAND(P,Q)
- A=0, B=0:M=1、P=NAND(0,1)=1、Q=NAND(0,1)=1、Y=NAND(1,1)=0
- A=0, B=1:M=1、P=NAND(0,1)=1、Q=NAND(1,1)=0、Y=NAND(1,0)=1
- A=1, B=0:M=1、P=NAND(1,1)=0、Q=NAND(0,1)=1、Y=NAND(0,1)=1
- A=1, B=1:M=0、P=NAND(1,0)=1、Q=NAND(1,0)=1、Y=NAND(1,1)=0
- 出力は 0,1,1,0。入力が違うときだけ 1 なので XOR
答え:ウ:XOR(排他的論理和)素子
3入力多数決回路を 000・001・111 で選ぶ
| A | B | C | Y |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 0 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 |
ア [図] AND(A,B),AND(B,C) の出力を OR に入れ,その出力と AND(A,C) の出力を OR に入れて Y とする回路。
イ [図] XOR(A,B),XOR(B,C) の出力を OR に入れ,その出力と XOR(A,C) の出力を OR に入れて Y とする回路。
ウ [図] OR(A,B),OR(B,C) の出力を AND に入れ,その出力と OR(A,C) の出力を NAND に入れて Y とする回路。
エ [図] XOR(A,B),XOR(B,C) の出力を AND に入れ,その出力と XOR(A,C) の出力を NAND に入れて Y とする回路。
解き方と答えを見る
- 真理値表から正しい出力を確認する:000→0、001→0、111→1
- 000 を入れる:ウは OR がすべて 0 → AND=0 → NAND(0,0)=1、エは XOR がすべて 0 → AND=0 → NAND(0,0)=1。どちらも 0 になるべきところが 1 なので ×
- 111 を入れる:イは XOR(1,1)=0 が3つ → OR=0。1 になるべきところが 0 なので ×(001 でも XOR(B,C)=1 となり 1 を出すので ×)
- アを確かめる:000→AND がすべて 0→0 ○、001→AND(A,B)・AND(B,C)・AND(A,C) すべて 0→0 ○、111→AND がすべて 1→1 ○
- アは Y=A・B+B・C+C・A そのものの回路
答え:ア:AND 3つを OR でまとめた回路
偶数パリティ検出回路(4ビット)を選ぶ
ア [図] 排他的論理和(XOR)素子 2 個の出力を,否定論理積素子(NAND)の 2 入力に接続した回路
イ [図] 排他的論理和(XOR)素子 2 個の出力を,論理和素子(OR)の 2 入力に接続し,その出力を論理否定器(NOT)に接続した回路
ウ [図] 排他的論理和(XOR)素子 2 個の出力を,排他的論理和素子(XOR)の 2 入力に接続した回路(出力に否定なし)
エ [図] 排他的論理和(XOR)素子 2 個の出力を,排他的論理和素子(XOR)の 2 入力に接続し,その出力を論理否定器(NOT)に接続した回路
出典:平成23年度 特別試験 基本情報技術者試験 午前 問24
解き方と答えを見る
- 求める出力:1 の数が 0個か偶数個なら 1、奇数個なら 0
- テスト入力を2つ選ぶ:0000(0個→1 が正解)と 1010(2個→1 が正解)
- 前段の XOR:0000 では XOR(0,0)=0 が2つ。1010 では XOR(1,0)=1 と XOR(1,0)=1
- ア(NAND):1010 で NAND(1,1)=0 → ×
- イ(OR→NOT):1010 で OR(1,1)=1 → NOT で 0 → ×
- ウ(XOR のみ):0000 で XOR(0,0)=0 → ×
- エ(XOR→NOT):0000 で XOR(0,0)=0 → NOT で 1 ○。1010 で XOR(1,1)=0 → NOT で 1 ○。念のため 1000(1個)で XOR(1,0)=1 → NOT で 0 ○
答え:エ:XOR 2個 → XOR → NOT
偶数パリティビットを先頭に付ける
ア 30,3F,7A
イ 30,3F,FA
ウ B0,3F,FA
エ B0,BF,7A
出典:基本情報技術者試験 科目A免除 修了試験 20110626 実施分 問3
解き方と答えを見る
- 7ビットの文字コードの前に1ビット足して8ビットにする。足すビットは先頭(MSB)
- 30(16進)=011 0000(7ビット)。1 は2個で偶数 → パリティ 0 → 0011 0000=30
- 3F(16進)=011 1111。1 は6個で偶数 → パリティ 0 → 0011 1111=3F
- 7A(16進)=111 1010。1 は5個で奇数 → パリティ 1 → 1111 1010=FA
- 結果は 30、3F、FA
答え:イ:30,3F,FA
アノードコモン型に 92 を出力(0 で点灯)
ア [図] a・b・c・d・g が点灯,f・e が消灯,Dt(小数点)が点灯(「3」の形)。
イ [図] f・b・g・c が点灯,a・e・d が消灯,Dt が消灯(「4」の形)。
ウ [図] a・f・g・c・d が点灯,b・e が消灯,Dt が消灯(「5」の形)。
エ [図] a・f・e・g・c・d が点灯,b が消灯,Dt が点灯(「6」の形)。
解き方と答えを見る
- 92(16進)=1001 0010
- 右端から P0,P1,…:P0=0、P1=1、P2=0、P3=0、P4=1、P5=0、P6=0、P7=1
- 0 のビットが点灯:P0=a、P2=c、P3=d、P5=f、P6=g
- 消灯:P1=b、P4=e、P7=Dt
- 点灯 a,c,d,f,g は「5」の形。小数点は消灯
答え:ウ:「5」の形(Dt 消灯)
共通端子が Vcc の回路に B0 を出力(0 で点灯)
ア [図] 7セグメント表示(右上の縦セグメントb・右下の縦セグメントcが点灯,小数点DPが点灯,他は消灯)
イ [図] 7セグメント表示(上a・右上b・中央g・右下c・下dが点灯,左側e・fは消灯,DPは消灯)
ウ [図] 7セグメント表示(上a・左上f・中央g・左下e・右下c・下dが点灯,右上bは消灯,DPが点灯)
エ [図] 7セグメント表示(上a・左上f・中央g・左下e・下dが点灯,右側b・cは消灯,DPは消灯)
出典:基本情報技術者試験 科目A免除 修了試験 20170611 実施分 問21
解き方と答えを見る
- B0(16進)=1011 0000
- 右端から:P0=0、P1=0、P2=0、P3=0、P4=1、P5=1、P6=0、P7=1
- 0 のビットが点灯:a,b,c,d(P0〜P3)と g(P6)
- 消灯:e(P4)、f(P5)、DP(P7)
- 点灯 a,b,c,d,g は「3」の形
答え:イ:a・b・g・c・d が点灯(DP 消灯)
要点(試験直前に読む)
- NAND だけで作る式:NOT X=X NAND X、AND=(X NAND Y) NAND (X NAND Y)、OR=(X NAND X) NAND (Y NAND Y)
- NAND 2段(1段目の NAND を最後の NAND でまとめる形)=AND どうしの OR(積和)。例:A・B + C・D
- NAND 4個で、1段目の出力を2つの NAND に配ってから最後にまとめる形は XOR
- 多数決は Y=A・B+B・C+C・A(AND 3つ → OR)。選択肢は 000・001・111 を入れて消す
- XOR をつなぐと奇数検出、最後に NOT を付けると偶数検出。偶数パリティは 1 の総数を偶数にそろえる
- 7セグは 16進→2進、右端が P0(a)、問題文の「0 で点灯/1 で点灯」に従ってビットを拾う
ひっかけ
- NAND で OR を作る問題では、(X NAND Y) を2回使う式(実は AND)を混ぜてくる。X=1, Y=0 などを代入すれば一発で消せる
- 多数決回路で「XOR が入っているから不正解」と決めつけると危ない。エ(XOR→AND→NAND)は 111 では正しく、000 で初めて誤りが出る。必ず 000・001・111 を回路に入れて確かめる
- パリティ回路では、最後の NOT の有無や NAND・OR との差し替えでひっかける。0000 と 1010(1が2個)を入れて、両方 1 になるものを選ぶ
- パリティビットの問題では、偶数と奇数を取り違えると 30 や 3F にも 1 を付けた選択肢を選んでしまう。1 の個数を数えてから、総数が偶数になるか確かめる
- 7セグでは、点灯条件(0 か 1 か)を逆に読むと反転した表示の選択肢を選んでしまう。P0 を左端と読み違えるのも典型的なミス。問題文の点灯条件に丸をつけ、右端から P0 と書き込む
用語(17)
AND の結果を反転したもので、入力がすべて 1 のときだけ 0 を出すゲート。
⚠ NOR は OR の反転で、入力がすべて 0 のときだけ 1 を出す。NAND は「全部 1 のときだけ 0」と覚えて区別する
OR の結果を反転したもので、入力がすべて 0 のときだけ 1 を出すゲート。
⚠ NAND と取り違えやすい。回路記号では NOR は OR の形の出力側に○が付いている
2つの入力が異なるときだけ 1 を出すゲートで、何個もつなげると「1が奇数個なら 1」になる。
⚠ OR は 1,1 でも 1 を出すが、XOR は 1,1 で 0 を出す
入力がすべて 1 のときだけ 1 を出す演算で、式では「・」で書く。
⚠ 論理和(+)と記号を取り違えない
入力のどれかが 1 なら 1 を出す演算で、式では「+」で書く。
⚠ XOR との違いは 1,1 のときの出力(OR は 1、XOR は 0)
0 と 1 を反転させる演算で、式では ¬X や X̄(上線)で書く。
⚠ NAND の2本の入力に同じ信号を入れた回路も NOT と同じ働きになる
全体の否定をばらすと AND と OR が入れ替わり、¬(A・B)=¬A+¬B、¬(A+B)=¬A・¬B が成り立つという法則。
⚠ ¬(A・B) を ¬A・¬B と、AND のまま否定だけ配ってしまう誤りに注意
そのときの入力だけで出力が決まり、記憶を持たない論理回路。
⚠ 順序回路(フリップフロップなど)は過去の状態を記憶し、出力が入力の履歴にも左右される
入力の 0/1 の組合せすべてについて出力を並べた表。
入力の過半数が 1 のとき 1 を出す回路で、3入力なら Y=A・B+B・C+C・A。
⚠ XOR を使った回路と混同しやすい。000 や 111 を入れて確かめると見分けられる
1の個数を偶数か奇数にそろえるために付け足す1ビットで、ビット誤りの検出に使う。
⚠ 誤りを検出できるのは1ビットの誤りだけで、訂正まではできない
パリティビットを含めた 1 の総数が偶数になるように付ける方式。
⚠ 奇数パリティは総数を奇数にそろえる。問題文の「偶数」「奇数」を必ず確認する
パリティビットを含めた 1 の総数が奇数になるように付ける方式。
⚠ 偶数パリティと逆。取り違えると全部のコードの先頭ビットが反転した選択肢を選んでしまう
a〜g の7本の発光部(と小数点)の点灯の組合せで数字を表示する部品。
LED のプラス側(アノード)をまとめて電源(Vcc)につなぐ方式で、出力が 0 のセグメントが点灯する。
⚠ カソードコモン型はマイナス側を接地し、出力が 1 のセグメントが点灯する。問題文の「0 のとき点灯」「1 のとき点灯」で判断する
LED のマイナス側(カソード)をまとめて接地(GND)する方式で、出力が 1 のセグメントが点灯する。
⚠ アノードコモン型と点灯条件が逆
2進数のいちばん左の桁が MSB、いちばん右の桁が LSB。
⚠ 7セグ問題では「P0=LSB=右端」。左から P0 と数えると表示がずれる
このレッスンの過去問
- NAND素子による論理和(OR)回路構成平成29年度 春期 基本情報技術者試験 午前 問3
- NAND素子によるXOR回路の構成平成26年度 秋期 基本情報技術者試験 午前 問21
- 3入力多数決回路の論理構成平成30年度 春期 基本情報技術者試験 午前 問23
- 偶数パリティ検出回路(XORとNOT)平成23年度 特別試験 基本情報技術者試験 午前 問24
- 7セグメントLEDの点灯パターン計算(16進→2進)平成28年度 秋期 基本情報技術者試験 午前 問21