令和3年度秋期午前Ⅰ 問4についての考察と解法

テーマ: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  

ここまで読んでくれてありがとう!!
感謝!
感謝!

 問題一覧へ

コメント