令和3年度 秋期 プロジェクトマネージャ試験 データベーススペシャリスト試験 エンベデッドシステムスペシャリスト試験 システム監査技術者試験 情報処理安全確保支援士試験 午前Ⅰ 問題【共通】 問4

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

解答・解説

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

16ビットのCPUにおいて、負数を 2の補数 で表す符号付き16ビット整数が表現できる値の範囲は、−32,768≦x≦32,767-32,768 \leqq x \leqq 32,767 です。
加算結果がこの範囲を超えると オーバフロー が発生します。

オーバフローは、同符号の数値(正の数同士、または負の数同士)を加算したときに、結果の絶対値が大きくなることで発生する可能性があります。一方、異符号の数値(正の数と負の数)を加算する場合、実質的には絶対値の引き算となるため、結果の絶対値は加算前の2つの数値の絶対値のうち大きい方よりも必ず小さく(または等しく)なります。したがって、加算結果は元の数値が収まっていた表現可能な範囲内に必ず収まり、オーバフローは絶対に発生しません。

各選択肢の解説

  • ア:∣x1∣+∣x2∣≦32,768|x_1| + |x_2| \leqq 32,768 の場合
    例えば、x1=20,000x_1 = 20,000、x2=12,768x_2 = 12,768 とすると、∣x1∣+∣x2∣=32,768|x_1| + |x_2| = 32,768 となり条件を満たしますが、x1+x2=32,768x_1 + x_2 = 32,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 未満という条件を満たしますが、x1+x2=40,000x_1 + x_2 = 40,000 となり、表現できる上限の 32,76732,767 を超えるためオーバフローします。
  • ウ:x1×x2>0x_1 \times x_2 > 0 の場合
    積が正になるということは、x1x_1 と x2x_2 が 同符号(両方とも正、または両方とも負)であることを意味します。同符号の加算は絶対値が大きくなるため、オーバフローが発生する可能性があります。
  • エ:x1x_1 と x2x_2 の符号が異なる場合
    正解です。正の数と負の数の加算では、結果が表現可能な範囲(−32,768≦x≦32,767-32,768 \leqq x \leqq 32,767)をはみ出すことはないため、どのような組み合わせでもオーバフローは発生しません。

Spineチーム