令和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の符号が異なる場合
解答・解説を見る
正解:エ
AI解説
16ビット符号付き加算では、加算する2数の符号が同じ場合にのみ、その和が表現範囲を超えてオーバフローする可能性がある。x1とx2の符号が異なる場合、和の絶対値はどちらか大きい方の絶対値以下に収まるため、いかなる値の組合せでも絶対にオーバフローは発生しない。 ア: |x1|+|x2|≦32,768という条件は特定の値の組合せに限った制約であり、これを満たさない(絶対値の和が大きい)同符号の組合せではオーバフローし得るため、全ての組合せでオーバフローしない条件にはならない。 イ: |x1|、|x2|がともに32,767未満であっても、両方が正(または両方が負)で絶対値の和が32,768以上になる組合せがあり得るため、オーバフローを完全には排除できない。 ウ: x1×x2>0はx1とx2が同符号であることを意味し、この場合はむしろ絶対値の和が範囲を超えるとオーバフローが発生し得る条件である。 エ: 符号が異なる2数を加算する場合、和の絶対値は大きい方の絶対値を超えることがなく、表現範囲(−32,768〜32,767)を超えることは原理的にないため、常にオーバフローしない。これが正解である。 💡 符号付き加算のオーバフローは『同符号同士の加算でのみ発生し得る』のが原則。異符号の加算は減算的に作用するため範囲を超えない、という直感を持っておくと速い。
※Web掲載用に表記を一部変更しています。著作権はIPAに帰属します。