AUシステム監査技術者試験 午前Ⅰ

令和3年度秋期 システム監査技術者 午前Ⅰ 問4

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

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

選択肢

  1. ア
    |x₁|+|x₂|≦32、768 の場合
  2. イ
    |x₁|及び|x₂|がともに 32、767 未満の場合
  3. ウ
    x₁×x₂>0 の場合
  4. エ
    x₁ と x₂ の符号が異なる場合
解き方のヒントを見る

符号付き加算を考える視点

計算結果だけで判断せず、入力値の符号と結果の表現範囲の関係に注目し、条件を整理する順序を意識して確認しましょう。

この問題で問われていること

二つの入力と計算後の値について、符号の組合せ、結果の符号、扱える範囲の関係を同じ基準で見比べることに集中しましょう。

視点

入力値どうしの関係と、計算結果が表現可能な範囲に収まるかを切り分け、個別の値に引きずられず条件の組合せを整理します。

確認ポイント

  • 入力値の符号の組合せを整理する
  • 計算後の値の符号を入力と比較する
  • 表現できる範囲との関係を確認する
正解と解説を見る

正解

エ

解説

16ビット符号付き整数の範囲は−32、768から32、767です。同符号の値を加えると範囲外になる可能性がありますが,異符号の加算は差になるため,結果はこの範囲内に収まります。

理由

16ビット符号付き整数の範囲は−2^15=−32、768から2^15−1=32、767です。異なる符号の値を加える計算は,絶対値の大きい側から小さい側を引く形になるため,結果は−32、768以上32、767以下に収まります。

比較

同じ符号の値を加える場合は,正数同士で32、767を超えたり,負数同士で−32、768を下回ったりする可能性があります。そのため,絶対値の条件や積の条件だけでは,全ての組合せでオーバフローしないことを保証できません。

選択肢ア

これは不正解だよ。|x₁|+|x₂|≦32,768でも,例えばx₁=16,384,x₂=16,384なら加算結果は32,768となります。16ビット符号付き整数の最大値は32,767なので,この条件では正数同士の加算で1単位範囲を超える場合があります。

選択肢イ

これは不正解だよ。|x₁|と|x₂|がともに32,767未満でも,例えば正の値32,766同士を加えると結果は65,532になります。これは16ビット符号付き整数の最大値32,767を大きく超えるため,条件だけではオーバフローを防げません。

選択肢ウ

これは不正解だよ。x₁×x₂>0は,二つの値がともに正またはともに負であることを示します。正数同士なら32,767を超え,負数同士なら−32,768を下回る可能性があるため,オーバフローしない条件にはなりません。

選択肢エ(正解)

これは正解だよ。x₁とx₂の符号が異なる場合,加算結果は一方の絶対値から他方を引いた値になります。したがって結果は−32,768以上32,767以下に収まり,16ビット符号付き整数の表現範囲を超えないため,オーバフローしません。

学習のポイント

2の補数の表現範囲と,符号付き加算でのオーバフロー条件を理解する。

出典:独立行政法人 情報処理推進機構(IPA)令和3年度秋期 システム監査技術者試験 午前Ⅰ 問4(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針