基本情報技術者 2009年 秋期 午前(科目A) 問25
問題文
図は全加算器を表す論理回路である。図中のxに1、yに0、zに1を入力したとき、出力となるc(けた上げ数)、s(和)の値はどれか。


選択肢
ア:
イ:
ウ:(正解)
エ:
##: 全加算器の出力(x=1, y=0, z=1)【午前2 解説】
要点まとめ
- 結論:入力が x=1, y=0, z=1 のとき、出力は上位桁 c=1、和 s=0 であり選択肢はウが正解です。
- 根拠:全加算器の和は 、桁上げは (論理積と和)で計算できます。
- 差がつくポイント:XOR の順序や多数決的なキャリー式を確実に覚え、手で逐次計算する習慣を付けてください。
正解の理由
正解: ウ(c=1, s=0)
全加算器の定義に従い、和 と桁上げ は次の式で与えられます。
全加算器の定義に従い、和 と桁上げ は次の式で与えられます。
- (ここで は論理和、隣接は論理積)
与えられた入力を代入すると、
よって出力は 、選択肢のうち「c=1, s=0」に当たるのがウです。
よくある誤解
- XOR の性質で 1⊕0⊕1 を (1⊕1)⊕0 として誤って 0⊕0 = 0 と計算してしまうミス。
- キャリーを単に任意の一つの入力が1なら1と誤解し、多数決(2つ以上)を見落とすこと。
解法ステップ
- 全加算器の出力式を確認する:, を確認。
- 与えられた入力 x=1, y=0, z=1 を式に代入する。
- XOR を順に計算する:1⊕0=1、さらに 1⊕1=0 を得て 。
- キャリー項を計算する:1·0=0, 0·1=0, 1·1=1 を足して 。
- 表示された選択肢と照合して、c=1, s=0 に該当する選択肢を選ぶ(ウ)。
選択肢別の誤答解説
- ア(c=0, s=0): s=0 は一致するが c が 0 になっており、xとzの積 1·1 を見逃した誤り。
- イ(c=0, s=1): s を 1 としている点が間違い。実際は 1⊕0⊕1 = 0 になる。
- ウ(c=1, s=0): 正解。上記の通り , で条件を満たす。
- エ(c=1, s=1): c は正しいが s が誤り。和の XOR 計算を誤ったケース。
補足コラム
- 全加算器は半加算器2個と1つの OR 回路で実装可能です。半加算器は , を出力します。
- キャリー式 は「入力のうち少なくとも2つが1であるとき1」つまり多数決的な特性を持ちます。
- 真理値表(全8通り)を覚えておくと試験で高速に判断できます。簡単な Python コードで確認可能です:
# 全加算器の真理値表
for x in (0,1):
for y in (0,1):
for z in (0,1):
s = x ^ y ^ z
c = (x & y) | (y & z) | (z & x)
print(x,y,z, "-> c=", c, "s=", s)
- 実務ではキャリー伝播遅延が性能に影響するため、キャリー生成・伝搬(carry generate/propagate)回路やキャリールックアヘッドが用いられます。
FAQ
Q: 全加算器の s を計算する別の直感的な方法は?
A: 入力の1の個数が奇数なら s=1、偶数なら s=0(XOR は奇数パリティ検出)。
A: 入力の1の個数が奇数なら s=1、偶数なら s=0(XOR は奇数パリティ検出)。
Q: キャリー c は「多数決」と表現できますか?
A: はい。x,y,z のうち少なくとも2つが1のときに c=1 となるため、多数決的性質と考えられます。
A: はい。x,y,z のうち少なくとも2つが1のときに c=1 となるため、多数決的性質と考えられます。
関連キーワード: 全加算器、半加算器、XOR、キャリー、真理値表、ブール代数、デジタル回路、キャリールックアヘッド、伝播遅延

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

