令和3年度 秋期 午前 問8
コンピュータ構成要素
オーバフローしないもの
演算レジスタが 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 の符号が異なる場合
答えと解説を見る
✓ これが正解エx1 と x2 の符号が異なる場合
解説
符号が違う二数の和は元の範囲から外に出ない形です。
設問は、16 ビットの符号付き加算でどの入力の組でもあふれない条件を四つの記述の中から選ばせています。ですから見分けの軸は、その条件を満たす任意の二数を選んでも、和が表現できる範囲の内側に必ず収まるかどうか、という一点だけです。2 の補数で書ける範囲は負側にも正側にも決まった端まで並んでおり、符号が違う二つの数を足し合わせると、その和は必ず二つの数の間のどこかに落ち着くため、片方が範囲内にあれば和も範囲内にとどまります。同じ符号どうしを足すと、絶対値がある程度大きい組合せで範囲の端を越える可能性が残るので、絶対値の大きさに条件を置くだけでは、あふれる組を排除しきれません。
ほかの選択肢はなぜ違うのか
- ア|x1| + |x2| ≦ 32,768…:絶対値の和が 32,768 以下なら常にあふれないと述べています。同じ符号どうしを合計するとこの上限ちょうどの組合せで正の側の限界を一つ超えることになり、あふれる組が残ります。
- イ|x1| 及び |x2| がともに 32…:両方の絶対値が 32,767 未満なら常にあふれないと述べています。ですが同じ符号どうしで両方が上限に近い値になる組合せを作れば和は表現範囲の端を越え、あふれる組が残ります。
- ウx1×x2 > 0 の場合:二数の積が正、つまり同じ符号のときあふれないと述べています。しかし同じ符号どうしこそが和が範囲の端を越えうる組合せで、この条件はむしろあふれる組を集めた記述になっています。
出典:令和3年度 秋期 応用情報技術者試験 午前 問8
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)