この試験の対策ガイド

情報処理安全確保支援士試験 対策ガイド

合格率・勉強法・参考書の選び方をまとめています

見る →
答えと解説を見る(先に解くのがおすすめ)

正解は エ

解説

16ビット符号付き整数の表現範囲は-32768~+32767です。オーバフローは「正の最大値を超える」または「負の最小値を下回る」場合に発生します。オーバフローが必ず発生しない条件を考えます。x1とx2の符号が異なる場合(一方が正、他方が負)、加算結果は必ずどちらかの絶対値が減少するため、|x1+x2| < max(|x1|, |x2|) ≤ 32767 となり、オーバフローは絶対に発生しません。正の数と負の数を足すと結果は両者の間に収まるためです。選択肢dの「x1とx2の符号が異なる場合」が正解です。

なぜ他の選択肢は違うのか

選択肢 ア
「|x1|+|x2|≦32,768の場合」は必ずしもオーバフローしないとは限りません。x1=x2=16384(正)の場合、|x1|+|x2|=32768で条件を満たしますが、x1+x2=32768>32767となりオーバフローします。
選択肢 イ
「|x1|及び|x2|がともに32,767未満の場合」も安全ではありません。x1=x2=32767(両方正)なら32767+32767=65534でオーバフローします。x1=32766、x2=32767でも65533>32767となります。
選択肢 ウ
「x1×x2>0の場合」はx1とx2が同符号(両方正または両方負)の場合を意味します。両方正のとき大きな値になりやすく、オーバフローが起こりやすい条件です。

解くときのポイント

符号付き整数のオーバフロー:同符号の加算(正+正、負+負)でのみ発生。異符号の加算(正+負)では結果の絶対値がどちらかの絶対値以下になるため必ずオーバフローしない。16ビット符号付きの範囲:-32768(-2^15)~+32767(2^15-1)を確認しておく。