令和3年度 秋期 応用情報技術者試験 午前 問題 問8

演算レジスタが 16 ビットの CPU で符号付き 16 ビット整数 x1x_1, x2x_2 を 16 ビット符号付き加算 (x1+x2)(x_1+x_2) するときに,全ての x1x_1, x2x_2 の組合せにおいて加算結果がオーバフローしないものはどれか。ここで,∣x∣|x| は xx の絶対値を表し,負数は 2 の補数で表すものとする。

解答・解説

正解: エ. x1x_1 と x2x_2 の符号が異なる場合

16ビットの演算レジスタで負数を 2の補数 で表す場合、表現できる整数の範囲は −32,768≦x≦32,767-32,768 \leqq x \leqq 32,767 です。
オーバーフローとは、演算結果がこの表現可能な範囲を超えてしまうことを指します。

2つの整数 x1x_1 と x2x_2 の符号が異なる(一方が正、他方が負)場合、それらを加算した結果は、必ず x1x_1 と x2x_2 の値の間に収まります。元の x1x_1 と x2x_2 がともに表現可能な範囲内であれば、その間に収まる加算結果も必然的に表現可能な範囲内(−32,768-32,768 ~ 32,76732,767)に収まるため、決してオーバーフローすることはありません。

したがって、全ての組合せにおいて加算結果がオーバフローしないのは「エ」です。

各選択肢の解説

  • ア:∣x1∣+∣x2∣≦32,768|x_1|+|x_2| \leqq 32,768 の場合
    誤り。例えば x1=16,384x_1 = 16,384、x2=16,384x_2 = 16,384 のとき、条件 ∣16,384∣+∣16,384∣=32,768≦32,768|16,384| + |16,384| = 32,768 \leqq 32,768 を満たしますが、加算結果は 32,76832,768 となり、表現可能な正の最大値 32,76732,767 を超えるためオーバーフローします。

  • イ:∣x1∣|x_1| 及び ∣x2∣|x_2| がともに 32,76732,767 未満の場合
    誤り。例えば x1=20,000x_1 = 20,000、x2=20,000x_2 = 20,000 のとき、どちらの絶対値も 32,76732,767 未満という条件を満たしますが、加算結果は 40,00040,000 となり、正の最大値 32,76732,767 を超えるためオーバーフローします。

  • ウ:x1×x2>0x_1 \times x_2 > 0 の場合
    誤り。条件 x1×x2>0x_1 \times x_2 > 0 は、2つの値が同符号(ともに正、またはともに負)であることを意味します。同符号の値を加算すると絶対値が大きくなるため、オーバーフローする可能性があります(例:x1=20,000,x2=20,000x_1 = 20,000, x_2 = 20,000 の加算など)。

  • エ:x1x_1 と x2x_2 の符号が異なる場合
    正しい。符号が異なる2つの数の加算では、結果は必ず元の2つの値の間に収まります。元の値が表現可能な範囲内であれば、加算結果も必ず表現可能な範囲内に収まるため、オーバーフローは絶対に発生しません。

Spineチーム