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


選択肢
ア:
イ:
ウ:(正解)
エ:
🔒 解説は解答すると表示されます
全加算器の出力計算【午前解説】
正解の理由
正解: ウ(c=1, s=0)
全加算器の定義に従い、和 と桁上げ は次の式で与えられます。
全加算器の定義に従い、和 と桁上げ は次の式で与えられます。
- (ここで は論理和、隣接は論理積)
与えられた入力を代入すると、
よって出力は 、選択肢のうち「c=1, s=0」に当たるのがウです。
解法ステップ
- 全加算器の出力式を確認する:, を確認。
- 与えられた入力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計算を誤ったケース。
よくある誤解
- XORの性質で1⊕0⊕1を (1⊕1)⊕0として誤って0⊕0 = 0と計算してしまうミス。
- キャリーを単に任意の一つの入力が1なら1と誤解し、多数決(2つ以上)を見落とすこと。
補足コラム
- 全加算器は半加算器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、キャリー、真理値表、ブール代数、デジタル回路、キャリールックアヘッド、伝播遅延

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

