SkillStack
テクノロジ系4 / 30問

高度情報処理技術者試験・情報処理安全確保支援士試験 令和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に質問できる
SkillStackで無料で始める