16 ビット符号付き加算でオーバフローしない条件
出典: 令和3年度 秋期 応用情報技術者試験 午前 問8 (IPA)
演算レジスタが 16 ビットの CPU で符号付き 16 ビット整数 x1,x2 を 16 ビット符号付き加算 (x1+x2) するときに,全ての x1,x2 の組合せにおいて加算結果がオーバフローしないものはどれか。ここで,|x| は x の絶対値を表し,負数は 2 の補数で表すものとする。
- ア |x1|+|x2|≦32,768 の場合
- イ |x1| 及び |x2| がともに 32,767 未満の場合
- ウ x1×x2>0 の場合
- エ x1 と x2 の符号が異なる場合
正解と解説を見る
正解: エ
- ア: 例えば x1 = x2 = 16,384 なら |x1| + |x2| = 32,768 ですが、和 32,768 は 32,767 を超えてオーバフローします。
- イ: 例えば x1 = x2 = 20,000 なら条件を満たしますが、和 40,000 はオーバフローします。
- ウ: x1 × x2 > 0 は同じ符号どうしということで、むしろオーバフローが起こり得る組合せです。
- エ: 符号が異なる 2 数の和は、絶対値が大きい方の値の範囲に収まるので、オーバフローしません。正しい答えです。
ポイント
- 16 ビットの 2 の補数で表せる範囲は −32,768 〜 32,767 です。
- 符号が異なる 2 数を足すと、結果の絶対値は大きい方の絶対値以下になるので、必ず範囲内 に収まり、オーバフローしません。
- 同じ符号どうしを足すと、範囲を超えることがあります。