SC情報処理安全確保支援士試験 午前Ⅰ

令和3年度秋期 情報処理安全確保支援士 午前Ⅰ 問4

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

問題

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

選択肢

  1. ア
    7||*2| ミミ32、768の場合
  2. イ
    |z7|及び|x2|がともに32、767未満の場合ウーz7Xx2>0の場合
  3. ウ
    妨とx2の符号が異なる場合
  4. エ
    呈旋巡
解き方のヒントを見る

午前I 問04:符号付き加算でオーバフローする条件をつかもう

符号付きの数を足すときのオーバフローは、プラス同士・マイナス同士みたいに同じ向きの数を足したときに起こり得るよ。たとえば、同じ方向にどんどん進んでメーターの上限や下限を超えてしまうイメージだね。逆に、プラスとマイナスを足す場合は、お互いに打ち消し合う方向に働くから、表せる範囲を飛び出すオーバフローは起きないよ。

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

符号付き加算では、どんな組合せのときにオーバフローが起こり得るのかを判断できるかがポイントだよ。

Signed Overflow

overflow occurs when adding two positives or two negatives beyond range

different signs -> no overflow

確認ポイント

  • 絶対値和だけでは十分条件にならない。
  • 異符号なら必ず安全です。
  • 2 の補数表現でも同じ原理です。
正解と解説を見る

正解

エ

出典

問題文と解答は IPA 公開の過去問題冊子・解答例を基にしています。

選択肢ア

これは不正解だよ。|x1|+|x2| が 32,768 以下でも、例えば 32,767 + 1 は 32,768 になって、上限の 32,767 を超えてしまう。財布に入る上限が32,767円なのに、32,768円を入れようとしてあふれる感じだね。

選択肢イ

これは不正解だよ。|x1| と |x2| がどちらも 32,767 未満でも、30,000 + 30,000 のように足した結果が 32,767 を超えることがある。小さめの荷物でも、2個まとめると箱に入りきらないことがある、というイメージだよ。

選択肢ウ

これは不正解だよ。x1×x2>0 は、x1 と x2 が同じ符号、つまり両方プラスか両方マイナスという意味だよ。同じ向きにどんどん進むと、プラス側なら 32,767 を超えたり、マイナス側なら -32,768 より小さくなったりする。だから、むしろオーバフローが起きやすい条件なんだ。

選択肢エ(正解)

これは正解だよ。16ビットの符号付き整数で表せる範囲は -32,768〜32,767 だから、同じ向きの数を足すと範囲を飛び出すことがある。でも、プラスとマイナスの数を足す場合は、家計で「収入」と「支出」を相殺するようなものなので、結果が極端に大きく外へ飛び出さないんだ。だからオーバフローしないよ。

出典:独立行政法人 情報処理推進機構(IPA)令和3年度秋期 情報処理安全確保支援士試験 午前Ⅰ 問4(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

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