令和3年度 秋期 応用情報技術者試験 午前 問8
テクノロジ/コンピュータ構成要素演算レジスタが 16 ビットの CPU で符号付き 16 ビット整数 x1,x2 を 16 ビット符号付き加算(x1+x2)するときに,全ての x1,x2 の組合せにおいて加算結果がオーバフローしないものはどれか。ここで,|x| は x の絶対値を表し,負数は 2 の補数で表すものとする。
出典:令和3年度 秋期 応用情報技術者試験 午前 問8
- ア|x1|+|x2|≦32,768 の場合
- イ|x1|及び|x2|がともに 32,767 未満の場合
- ウx1×x2>0 の場合
- エx1 と x2 の符号が異なる場合
正解:エ
解説
16 ビット符号付き整数の表現範囲は −32,768〜+32,767 です。オーバフローは正の数同士又は負の数同士の加算で範囲を超えたときに発生します。x1 と x2 の符号が異なる場合,加算結果の絶対値は必ず両者の絶対値の大きい方以下になるため,表現範囲を超えることはなく,オーバフローは発生しません。
選択肢ごとの解説
- ア誤り。例えば x1=32,767,x2=1 は |x1|+|x2|=32,768 で条件を満たしますが,加算結果 32,768 は正の最大値 32,767 を超えるためオーバフローします。
- イ誤り。例えば x1=x2=20,000 はともに 32,767 未満ですが,和は 40,000 となりオーバフローします。
- ウ誤り。x1×x2>0 は両者が同符号であることを意味し,同符号同士の加算はまさにオーバフローが発生し得る場合です。
- エ正しい。符号が異なる2数の和は,絶対値が大きい方の数の絶対値を超えないため,オーバフローは発生しません。