平成29年度 秋期 午前 問1
離散数学
数値を2進数で表すレジスタがある。このレジスタに格納されている正の整数 x を10倍にする操作はどれか。ここで,桁あふれは起こらないものとする。
- アx を2ビット左にシフトした値に x を加算し,更に1ビット左にシフトする。
- イx を2ビット左にシフトした値に x を加算し,更に2ビット左にシフトする。
- ウx を3ビット左にシフトした値と,x を2ビット左にシフトした値を加算する。
- エx を3ビット左にシフトした値に x を加算し,更に1ビット左にシフトする。
答えと解説を見る
✓ これが正解アx を2ビット左にシフトした値に x を加算し,更に1ビット左にシフトする。
解説
四倍に元を足して二倍すると、ちょうど十倍になりました。
左へ一つずらすと二倍、二つずらすと四倍になります。十倍は、二の重ね方だけでは作れません。だから、ずらした値と元の値を足す形にします。四倍に元を足すと五倍になり、さらに二倍すれば十倍でした。だから二つずらして足し、もう一つずらす肢が当たります。シフトと加算だけで、掛け算を組み立てられました。五倍にしてから四を掛ける肢は、二十倍になります。五倍まで同じですが、最後に四を掛けてしまいました。三つずらした値と二つずらした値を足す肢は、十二倍でした。八倍と四倍を足した形になります。九倍にしてから二倍する肢は、十八倍になりました。八倍に元を足して九倍とし、二倍した形です。倍率を数で書き出してみます。足してから、ずらす順を見ました。倍率を書き出して足し算にすれば、そこで決まります。
ほかの選択肢はなぜ違うのか
- イx を2ビット左にシフトした値に x を…:二つずらして足し、二つずらすと述べています。途中までは五倍で、確かに正しい形でした。ところが最後に二つずらしています。四を掛けることになりました。五倍の四倍で二十倍です。ずらしすぎました。最後のずらしが余分でした。
- ウx を3ビット左にシフトした値と,x を…:三つずらした値と二つずらした値を足すと述べています。八倍と四倍を足す形になりました。どちらもずらすだけなので、速くはあります。けれども合わせると十二倍でした。二倍ぶん多すぎます。組み方が違います。足す相手が違っていました。
- エx を3ビット左にシフトした値に x を…:三つずらして足し、一つずらすと述べています。八倍に元を足して、九倍になりました。それを二倍すると十八倍です。ところが十倍にはなりません。八倍ぶん多すぎます。初めのずらしが多いのです。初めが一つ多いのです。
出典:平成29年度 秋期 基本情報技術者試験 午前 問1
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)