基本情報技術者 2009年 春期 午前(科目A) 問25
問題文
図に示す1けたの2進数xとyを加算し、z(和の1けた目)及びc(けた上げ)を出力する半加算器において、AとBの素子の組合せとして、適切なものはどれか。


選択肢
ア:(正解)
イ:
ウ:
エ:
🔒 解説は解答すると表示されます
半加算器の論理構成【午前解説】
正解の理由
図での出力 z(和の1けた目)は入力 x, y の「ちょうど1つだけが1」のときに1になり、出力 c(けた上げ)は「両方が1」のときに1になります。これは論理的に表すと (排他的論理和)、(論理積)です。選択肢の組合せのうち、ブロック A を排他的論理和(XOR)、ブロック B を論理積(AND)とした組合せがこれらの式に一致するため、選択肢アが正解です。
解法ステップ
- 出力の意味を整理する
- z:和の1けた目 → 1になるのは「入力の1の個数が奇数(ここではちょうど1個)」のとき。
- c:けた上げ → 1になるのは「両方とも1」のとき。
- 真理値表を作る(x,y の全組合せについて z と c を決める)。
- 真理値表から論理式を導く:
- z = x XOR y()
- c = x AND y()
- 選択肢と照合して、A に XOR、B に AND を割り当てている組合せを選ぶ。
真理値表(参考)
(表から z が「ちょうど1個の1のときのみ1」であること、c が「両方1のときのみ1」であることが分かります)
選択肢別の誤答解説
- ア(A: 排他的論理和、B: 論理積)
A が 、B が であり、z と c の定義に完全に一致します。したがって正解です(選択肢ア)。 - イ(A: 否定論理積、B: 否定論理和)
否定論理積(NAND)は 、否定論理和(NOR)は を出力します。どちらも z, c の真理値(特に c が両方1のとき1)と一致しません。出力が反転しているため不適切です。 - ウ(A: 否定論理和、B: 排他的論理和)
A に NOR を割り当てると z が反転した振る舞い(x=y=0 のとき1など)になり、和の1けた目の条件と合いません。B に XOR を置いても、XOR はけた上げ(両方1のときに1)ではなく、ちょうど1つのときに1になるため c には不適切です。 - エ(A: 論理積、B: 論理和)
A を AND にすると z が両方1のときしか1にならず、和の1けた目(ちょうど1つのとき)に合いません。B を OR にすると c が「どちらかが1のとき」1になり、けた上げ(両方1のときのみ1)と矛盾します。
よくある誤解
- XOR と OR の混同
- OR は「どちらか一方または両方が1のとき1」を返します(両方1のときも1になる)。
- XOR は「ちょうど1つだけ1のときに1」を返します。半加算器の和ビットはこの「ちょうど1つ」の条件です。
この違いを明確に意識してください。
- キャリーを生成するゲートの誤認
- キャリーは「両方1」の条件に対応するので、AND が自然に対応します。XOR や OR では条件が合致しないため誤りになります。
補足コラム
半加算器(half adder)は1ビット同士の加算で「和」と「繰り上がり」を出力します。これを組み合わせて全加算器(full adder)を作ると、桁あふれを含む多ビット加算が可能になります。全加算器は2つの半加算器と1つの OR(または XOR/AND の組合せの変形)で構成できます。回路設計では、用途に応じて NAND だけで実現するなどの変換(論理合成)も行われます。
簡単な実装例(Python で真理値表を出す)
def half_adder(x, y):
z = x ^ y # XOR
c = x & y # AND
return z, c
for x in (0,1):
for y in (0,1):
print(x, y, half_adder(x,y))
FAQ
Q. なぜ AND をキャリーに使うと直感的に分かるのですか?
A. キャリーは「桁上がり」で、桁上がりが発生するのは両方のビットが1のときだけです。AND はまさにその条件に対応します。
A. キャリーは「桁上がり」で、桁上がりが発生するのは両方のビットが1のときだけです。AND はまさにその条件に対応します。
Q. XOR を使わずに和ビットを実現できますか?
A. 論理的には NAND や NOR のみを使っても等価回路を作れます(ブール代数の恒等変形により)。ただし基本表現としては XOR が直観的で簡潔です。
A. 論理的には NAND や NOR のみを使っても等価回路を作れます(ブール代数の恒等変形により)。ただし基本表現としては XOR が直観的で簡潔です。
Q. 全加算器ではどのように半加算器が使われますか?
A. 全加算器は2つの半加算器を使い、一方の半加算器で入力2ビットの和を取り、もう一方でその和と前段からのキャリーを加え、最終的なキャリーは両方のキャリーの OR をとる構成が一般的です。
A. 全加算器は2つの半加算器を使い、一方の半加算器で入力2ビットの和を取り、もう一方でその和と前段からのキャリーを加え、最終的なキャリーは両方のキャリーの OR をとる構成が一般的です。
関連キーワード: 半加算器、XOR、AND、論理回路、真理値表、キャリー、和ビット、ブール代数

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

