テーマ:16ビット整数の加算結果でオーバーフローしないもの
正解はこちら
解答:エ
[基礎知識・用語のまとめ]
オーバーフロー・・・数値の計算結果がその格納領域に収まる範囲を超えること(算術オーバーフロー/桁あふれ)や、与えられたデータが多すぎて指定の領域に収まりきらないこと(バッファオーバーフロー)を指します。
演算レジスタ・・・マイクロプロセッサ(MPU/CPU)内部にある、演算や実行状態の保持に用いる記憶素子です。高速な記憶装置ですが、一般的なCPU製品で数個から数十個(容量に換算して数十バイト程度)と数が限られます。
[解法]
演算レジスタが、16bitのCPUで符号付き16bit整数x1及びx2を加算するときにオーバーフローしないのは、どの条件かを考えます。この時、負数は2の補数で表すと明記があるため、符号付き16bit整数ではー2の15乗~2の15乗-1(-32,768~32,767)の範囲で値を表現できることが分かります。
選択肢「エ」においては、加算結果の絶対値が最も大きくなる組み合わせ
(x1=-1、x2 = 32,767 および x1=-32,768、x2=1)
を計算したとしても表現できる数-32,768~32,767を超えることはありません。
よって正解は、選択肢「エ」となります。
他の選択肢については以下の通りです。
ア→x1=32,767、x2=1とすると、x1+x2=32,768となり、表現できる数-32,768~32,767を超えて、オーバーフローします。
イ→x1=32,766、x2=32,766とすると、x1+x2=65,532となり、表現できる数-32,768~32,767を超えて、オーバーフローします。
ウ→[x1>0及びx2>0の場合]は選択肢「イ」と同じ状況であることが分かります。そのため、オーバーフローします。[x1<0及びx2<0の場合]x1=-32,768、x2=-32768とすると、x1+x2=-65,536となり、表現できる数-32,768~32,767を超えて、オーバーフローします。
[参考]
算術オーバーフローにより、ロケットの打ち上げが失敗した事例(1996年6月4日:クラスターミッション)がある、、、らしい。
利用させていただきました素材へのリンク
うさちゃこちゃんねる様 https://www.youtube.com/channel/UCQcDdg4W6r5OfcB1JTcpABw
コメント