高度情報処理技術者試験・情報処理安全確保支援士試験 令和3年度 秋期 午前I 問4
演算レジスタが16ビットのCPUで符号付き16ビット整数x1、x2を16ビット符号付き加算(x1+x2)するときに、全てのx1、x2の組合せにおいて加算結果がオーバフローしないものはどれか。ここで、|x|はxの絶対値を表し、負数は2の補数で表すものとする。
選択肢を押すと答え合わせができます。
正解と解説を見る
【正解】エ
符号付き16ビット整数を2の補数で表す場合、値の範囲は-32,768~32,767です。x₁とx₂の符号が異なれば、一方が非負、もう一方が負であり、加算時に絶対値が互いに打ち消されます。例えば、30,000+(-20,000)=10,000です。一般にx₁≧0、x₂<0なら、x₂≦x₁+x₂≦x₁となるため、結果は必ず-32,768~32,767の範囲内に収まります。したがって、全ての組合せでオーバフローしません。
アは誤りです。例えば、x₁=32,767、x₂=1では、|x₁|+|x₂|=32,768で条件を満たしますが、加算結果は32,768となり、表現可能な最大値32,767を超えます。
イは誤りです。例えば、x₁=20,000、x₂=20,000は、どちらの絶対値も32,767未満ですが、20,000+20,000=40,000となり、オーバフローします。
ウは誤りです。x₁×x₂>0は両方が正又は両方が負であることを表し、同符号の加算こそオーバフローが発生し得ます。例えば、20,000+20,000=40,000です。
【ポイント】 2の補数によるnビット符号付き整数の範囲は、-2ⁿ⁻¹~2ⁿ⁻¹-1です。 加算のオーバフローは、同符号の二数を加えた結果の符号が変わったときに発生します。 異符号同士の加算では値が相殺されるため、オーバフローしません。
出典:令和3年度 秋期 高度情報処理技術者試験・情報処理安全確保支援士試験 午前I 問4
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。
この回の30問を、アプリで通しで解く
- 本番と同じ問題数・制限時間で通し演習(模試モード)
- 間違えた問題は自動で「復習すべき問題」に回る
- 解説で分からない点はAIに質問できる