基本情報技術者 2013年 秋期 午後 問01
論理演算と加算器に関する次の記述を読んで、設問1~4に答えよ。
真を1、偽を0として、主要な論理演算の真理値表を、表1に示す。


設問1:
問題文を見る AND, OR, XOR, NOTの各論理演算を行う論理回路を用いて、NANDとNORの論理演算を行う論理回路を作成した。次の記述中のに入れる正しい答えを、解答群の中から選べ。ここで、X, Yは1ビットの入力、Zは1ビットの出力とする。
(1) NANDの論理回路はaである。
(2) NORの論理回路はbである。
a, bに関する解答群


模範解答
a:イ、b:ア
解説
解答の導き方
この問題では、図の候補がどの論理演算を表しているかを、入力と出力の関係から確かめます。
ANDは、入力が両方とも1のときだけ1になります。ORは、入力の少なくとも一方が1なら1になります。NOTは、0と1を反対にする演算です。XOR(Exclusive OR:排他的論理和)は、2つの入力が異なるときに1になります。
まず、NAND(NOT AND:ANDの結果を否定する演算)を考えます。表1のNAND欄では、入力が両方1のときだけ出力が0で、それ以外は出力が1です。
解答群のイは、XとYをそれぞれNOTで反転してから、ORを行います。つまり、出力は「NOT X OR NOT Y」です。各入力の場合を確かめると、次のようになります。
これはNANDの出力と一致するため、NANDの論理回路はイです。
次に、NOR(NOT OR:ORの結果を否定する演算)を考えます。表1のNOR欄では、入力が両方0のときだけ出力が1で、それ以外は出力が0です。
解答群のアは、XとYをそれぞれNOTで反転してから、ANDを行います。XとYが両方0のときは反転後の入力が両方1になるため、ANDの出力は1です。それ以外の場合は、反転後の入力の少なくとも一方が0になるため、出力は0です。これはNORの出力と一致するため、NORの論理回路はアです。
誤りやすいポイント
- 入力をNOTで反転することと、演算結果をNOTで反転することは別です。イとアは入力を反転してからORまたはANDを行います。一方、エはXORの結果を反転しています。
- 解答群のウは、両方の入力を反転してからXORを行います。両方を反転しても、2つの入力が同じか異なるかは変わらないため、出力はXORと同じです。NANDにもNORにもなりません。
- 解答群のエは、XORの結果をNOTで反転します。XとYが両方1のときも出力が1になりますが、NANDの出力はそのとき0です。
FAQ
Q: NANDは、どのように考えると分かりやすいですか?
A: まずANDを行い、その結果をNOTで反転すると考えます。ANDの結果が1になるのは入力が両方1のときだけなので、NANDの出力はその場合だけ0になります。
A: まずANDを行い、その結果をNOTで反転すると考えます。ANDの結果が1になるのは入力が両方1のときだけなので、NANDの出力はその場合だけ0になります。
Q: なぜアはNORになるのですか?
A: アでは、XとYをそれぞれ反転してからANDを行います。反転後の両方の入力が1になるのは、元のXとYが両方0のときだけです。したがって、NORの出力と一致します。
A: アでは、XとYをそれぞれ反転してからANDを行います。反転後の両方の入力が1になるのは、元のXとYが両方0のときだけです。したがって、NORの出力と一致します。
Q: XORの入力を両方反転しても、XORの結果は変わらないのですか?
A: XORは、2つの入力が異なるときに1になる演算です。両方の入力を反転しても、入力同士が同じか異なるかは変わらないため、結果も変わりません。
A: XORは、2つの入力が異なるときに1になる演算です。両方の入力を反転しても、入力同士が同じか異なるかは変わらないため、結果も変わりません。
関連キーワード: 論理演算、真理値表、AND演算、OR演算、排他的論理和
設問2:
問題文を見る 各1ビットの入力X, Yを加算して、その結果を各1ビットのZと桁上がりCに出力する“半加算器”の真理値表を表2に、論理回路を図1に示す。図1中のに入れる正しい答えを、解答群の中から選べ。



解答群
ア:AND
イ:NAND
ウ:NOR
エ:OR
オ:XOR
模範解答
オ
解説
解答の導き方
この問題では、図1の上側の論理回路に入れる演算を、半加算器の真理値表から判断します。
まず、問題文では、入力 と を加算した結果を、1の位の値 と桁上がりの値 に分けています。たとえば なので、 は 、桁上がりの は です。
表2を の値に注目して見ると、次のようになります。
この表から、 と が異なるときは 、同じときは だと分かります。この動きをする演算が、XOR(Exclusive OR:排他的論理和)です。したがって、図1の上側の回路にはXORを入れます。解答群ではオです。
一方、表2の は、 と の両方が のときだけ です。この動きをする演算は AND(論理積)で、図1の下側の回路に使われています。
誤りやすいポイント
- を OR と間違えないようにします。OR は、入力のどちらか一方でも なら出力が です。そのため の場合も出力が になり、表2の とは一致しません。
- の結果を と考えないようにします。2進数では なので、 で、桁上がりの です。
- と は別の値です。 は加算結果の1の位、 は桁上がりを表します。
FAQ
Q: XORは、どのようなときに出力が になりますか?
A: 入力が異なるときです。 と 、または と の組合せで出力が になります。
A: 入力が異なるときです。 と 、または と の組合せで出力が になります。
Q: のとき、なぜ なのですか?
A: は2進数で だからです。1の位は で、桁上がりが になります。
A: は2進数で だからです。1の位は で、桁上がりが になります。
Q: AND とXORはどう見分ければよいですか?
A: AND は両方の入力が のときだけ出力が です。XORは入力が異なるときに出力が です。
A: AND は両方の入力が のときだけ出力が です。XORは入力が異なるときに出力が です。
関連キーワード: 半加算器、排他的論理和、論理積、真理値表、桁上がり
設問3:
問題文を見る 各1ビットの入力X, Yと、下位桁からの1ビットの桁上がりを加算して、その結果を各1ビットのZと桁上がりのCに出力する“全加算器”の真理値表を表3に、論理回路を図2に示す。図2中のに入れる正しい答えを、解答群の中から選べ。



解答群
ア:AND
イ:NAND
ウ:NOR
エ:OR
模範解答
エ
解説
解答の導き方
図2では、半加算器を2つ使って全加算器を作っています。空欄は、2つの半加算器から出る桁上がりをまとめる論理演算です。
まず、半加算器は2つの1ビットの値を加算し、和と桁上がりを出力します。表1を見ると、和は入力が異なるときに1になるのでXOR、桁上がりは入力の両方が1のときに1になるので AND です。
1つ目の半加算器には と が入力されます。その出力を、和を 、桁上がりを とすると、次のようになります。
2つ目の半加算器には、1つ目の和 と、下位桁からの桁上がり が入力されます。ここから、最終的な和 と、もう1つの桁上がり が出ます。
全加算器の桁上がり は、1つ目の半加算器で発生した と、2つ目の半加算器で発生した のどちらかが1なら、1になります。そのため、2つの桁上がりをまとめる演算は OR です。
表3でも確かめられます。、、 のときは、どちらの半加算器でも桁上がりが発生せず、 です。この場合、NANDやNORでは出力が1になってしまいます。
一方、、、 のときは、1つ目の半加算器で桁上がりが発生し、 です。ANDでは出力が0になってしまいます。両方の結果に合うのは、少なくとも片方が1なら1を出す OR です。
誤りやすいポイント
- 2つの半加算器の出力を、そのまま最終的な桁上がりと考えないようにします。2つの桁上がりを、右端の論理演算でまとめて にします。
- ANDは、入力の両方が1のときだけ1です。桁上がりは、2つの発生経路のどちらか一方で生じても出力する必要があります。
- 1つ目の半加算器から出る和は、最終的な和ではありません。これを2つ目の半加算器に入力し、 と合わせて最終的な和を求めます。
FAQ
Q: と は何が違いますか?
A: は下位桁から受け取る桁上がりです。 は、この桁の加算によって上位桁へ渡す桁上がりです。
A: は下位桁から受け取る桁上がりです。 は、この桁の加算によって上位桁へ渡す桁上がりです。
Q: なぜ半加算器を2つ使うのですか?
A: まず と を加算し、その結果に を加えるためです。半加算器は2つの値を加算する回路なので、この2段階で3つの入力を扱えます。
A: まず と を加算し、その結果に を加えるためです。半加算器は2つの値を加算する回路なので、この2段階で3つの入力を扱えます。
Q: ORは、両方の入力が1のときも1を出しますか?
A: はい。ORは、入力のうち少なくとも1つが1なら出力が1です。この回路では2つの桁上がりが同時に1になることはありませんが、どちらか一方が1になった場合に桁上がりを出せます。
A: はい。ORは、入力のうち少なくとも1つが1なら出力が1です。この回路では2つの桁上がりが同時に1になることはありませんが、どちらか一方が1になった場合に桁上がりを出せます。
関連キーワード: 半加算器、全加算器、桁上がり、排他的論理和、論理和
設問4:
問題文を見る 2の補数表現による4ビットの符号付き2進整数を加算する加算器を図3に示す。加算器は、2進整数とを加算して、結果を出力する。添字は桁の位置を示しており、値が大きいほど上位の桁を表す。


最上位ビットの加算において、, , の値が表3の全加算器の真理値表のそれぞれX, Y, の値のβ部分の組合せになるとき、桁あふれが生じる。これを検出するための論理回路を図4に、~が全て0となる場合を検出する論理回路を図5に示す。図4中と図5中のに入れる正しい答えを、解答群の中から選べ。


c, dに関する解答群
ア:AND
イ:NAND
ウ:NOR
エ:OR
オ:XOR
模範解答
c:オ、d:ウ
解説
解答の導き方
-
図4では、符号付き加算の桁あふれを検出します。図3では、下位の桁から順に加算し、桁からあふれた値を次の桁へ渡しています。たとえば、最上位ビットの加算には と に加えて、下位の桁からの繰上り が入ります。その加算結果から、最上位ビットの和 と、さらに外へ出る繰上り が得られます。2の補数表現は、正の数と負の数を決められたビット数で表す方法です。この表現で桁あふれが起きるのは、最上位ビットに入る繰上りと、最上位ビットから出る繰上りが異なるときです。つまり、 と が異なるかどうかを調べます。表1のXOR(排他的論理和)は、二つの入力が異なるときだけ値が1になります。したがって、 と の違いを検出する演算として、 にはXORが入ります。これは解答群の オ です。
-
図5では、~が全て0であることを検出します。図5の上段のブロックには と が入り、下段のブロックには と が入ります。それぞれのブロックが「入力された二つの値が両方とも0のとき」に1を出せば、最後の AND(論理積)で二つのブロックの出力を組み合わせたとき、4つの値が全て0の場合だけ が1になります。表1では、NOR(否定論理和)は二つの入力が両方とも0のときだけ1になります。したがって、各ブロックに入る はNORです。これは解答群の ウ です。
誤りやすいポイント
- が1かどうかだけでは、符号付き加算の桁あふれは判断できません。最上位ビットに入る繰上り と、出る繰上り が異なるかを調べます。
- XORは、入力が同じときではなく、異なるときに1になります。 と の比較に使えるのはこの性質によります。
- 図5では、各ブロックが1を出すのは入力が両方0のときです。ORではなくNORを使います。
- 図5の最後のANDは、上段と下段の両方の出力が1のときだけ を1にします。片方の組だけが0でも、 は1になりません。
FAQ
Q: なぜ図4では、繰上りを二つとも比べる必要があるのですか?
A: 符号付き加算の桁あふれは、最上位ビットに入る繰上りと、最上位ビットから出る繰上りが食い違ったときに起きるためです。どちらか一方だけでは判断できません。
A: 符号付き加算の桁あふれは、最上位ビットに入る繰上りと、最上位ビットから出る繰上りが食い違ったときに起きるためです。どちらか一方だけでは判断できません。
Q: 図5の各ブロックがNORで1を出したあと、なぜANDを使うのですか?
A: 上段と下段の両方が1になったときだけ、~の全てが0だと判断できるからです。
A: 上段と下段の両方が1になったときだけ、~の全てが0だと判断できるからです。
Q: XORとNORは、どのようなときに1になりますか?
A: XORは二つの入力が異なるときに1になります。NORは二つの入力が両方とも0のときに1になります。
A: XORは二つの入力が異なるときに1になります。NORは二つの入力が両方とも0のときに1になります。
関連キーワード: 2の補数表現、半加算器、全加算器、XOR、NOR、桁あふれ検出



