8ビットの2の補数で表す符号付き整数に、120と20を加算する。演算は下位8ビットだけを残し、あふれた桁は捨てるものとする。保存される値を符号付き10進数として解釈した結果と、符号付き整数のオーバーフローの有無はどれか。
本サイトで独自に作成。IPAの試験問題からの転載ではありません。
公開日:
選択肢を選んで、答え合わせをしましょう。
回答せずに正解・解説を確認する
正解:イ −116、オーバーフローあり
この表示だけでは、回答数や正答率は変わりません。
解説
数学的な和は140ですが、8ビット符号付き整数の範囲は−128〜127なので表現できません。下位8ビットは10001100です。これを2の補数として解釈すると、符号なし値140から256を引いた−116となります。正数同士の加算が負数になり、オーバーフローしています。
140は数学的な和ですが、8ビットの符号付き整数として保存できる上限127を超えています。
保存ビット列10001100を符号付きで読むと140 − 256 = −116で、範囲超過も起きています。
−12を表すのは11110100です。今回の下位8ビットとは一致しません。
116は01110100で、120と20の加算結果の下位8ビットではありません。
関連知識
同じ10001100でも、符号なし8ビットなら140、符号付き2の補数なら−116です。ビット列だけでなく型と解釈を確認します。実際の言語で範囲超過時にどうなるかは、言語仕様や型によって異なります。
間違えやすいポイント
符号付きオーバーフローを、9ビット目の桁上がりの有無だけで判定しないこと。今回の和140は符号なし8ビットには収まりますが、符号付きでは範囲外です。
覚え方
保存するビット数と、符号付きの範囲を先に確認。
実務での意味
組込み機器やバイナリデータを扱う際に、型の幅と符号をそろえ、範囲外の入力や計算結果を検出します。
解説:本サイト編集部によるオリジナル文章