令和3年度 秋期 応用情報技術者試験 午前 問題 問8
演算レジスタが 16 ビットの CPU で符号付き 16 ビット整数 , を 16 ビット符号付き加算 するときに,全ての , の組合せにおいて加算結果がオーバフローしないものはどれか。ここで, は の絶対値を表し,負数は 2 の補数で表すものとする。
解答・解説
正解: エ. と の符号が異なる場合
16ビットの演算レジスタで負数を 2の補数 で表す場合、表現できる整数の範囲は です。
オーバーフローとは、演算結果がこの表現可能な範囲を超えてしまうことを指します。
2つの整数 と の符号が異なる(一方が正、他方が負)場合、それらを加算した結果は、必ず と の値の間に収まります。元の と がともに表現可能な範囲内であれば、その間に収まる加算結果も必然的に表現可能な範囲内( ~ )に収まるため、決してオーバーフローすることはありません。
したがって、全ての組合せにおいて加算結果がオーバフローしないのは「エ」です。
各選択肢の解説
ア: の場合
誤り。例えば 、 のとき、条件 を満たしますが、加算結果は となり、表現可能な正の最大値 を超えるためオーバーフローします。イ: 及び がともに 未満の場合
誤り。例えば 、 のとき、どちらの絶対値も 未満という条件を満たしますが、加算結果は となり、正の最大値 を超えるためオーバーフローします。ウ: の場合
誤り。条件 は、2つの値が同符号(ともに正、またはともに負)であることを意味します。同符号の値を加算すると絶対値が大きくなるため、オーバーフローする可能性があります(例: の加算など)。エ: と の符号が異なる場合
正しい。符号が異なる2つの数の加算では、結果は必ず元の2つの値の間に収まります。元の値が表現可能な範囲内であれば、加算結果も必ず表現可能な範囲内に収まるため、オーバーフローは絶対に発生しません。