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

問4

演算レジスタが16ビットのCPUで符号付き16ビット整数x1,x2を16ビット符号付き加算(x1+x2)するときに,全てのx1,x2の組合せにおいて加算結果がオーバーフローしないものはどれか。ここで,|x|はxの絶対値を表し,負数は2の補数で表すものとする。
  • |x1|+|x2|≦32,768の場合
  • |x1|及び|x2|がともに32,767未満の場合
  • x1×x2>0の場合
  • x1とx2の符号が異なる場合
  • [出典]
  • 応用情報技術者
    令和3年秋期 問8と同題

分類

テクノロジ系 » コンピュータ構成要素 » プロセッサ

正解

解説

数値演算におけるオーバーフローとは、コンピュータで数値演算を行った結果、データ格納領域が扱える数値の範囲を超えてしまうエラーです。本問では16ビットの演算レジスタで符号付き加算を行うので、-215~215-1、すなわち -32768~32767 の整数が扱える範囲となります。したがって、演算結果がこの範囲を超える場合があるかかどうかを検証していくことになります。
  • 16ビット符号付き整数で表現できる最大値は 32767 なので、両方の符号が正で、|x1|+|x2|が32,768となるときにオーバーフローが発生します。例えば 1+32767 です。
  • x1とx2の符号が同じときにオーバーフローが発生する可能性があります。例えば 20000+20000 です。
  • x1×x2>0 というのはx1とx2の符号が同じということです。「イ」と同様に、x1とx2の符号が同じで、|x1|+|x2|が符号付き16ビットで表現できる範囲を超えるときには、オーバーフローが発生します。
  • 正しい。x1とx2の符号が異なっていれば、互いに打ち消し合うため、演算結果の絶対値はx1及びx2よりも小さくなります。よって、オーバーフローが発生することはありません。
© 2014-2024 情報処理安全確保支援士ドットコム All Rights Reserved.

Pagetop