第1種情報処理技術者試験 |
2000年度 = 平成12年度 |
午前 |
問5 |
数値を2進数で表すレジスタがある。このレジスタに格納されている正の整数xを10倍する方法はどれか。ここで、シフトによるあふれ(オーバフロー)は、ないものとする。
ア xを2ビット左にシフトした値にxを加算し、更に1ビット左にシフトする。
イ xを3ビット左にシフトした値と、xを2ビット左にシフトした値を加算する。
ウ xを3ビット左にシフトした値にxを加算し、更に1ビット左にシフトする。
エ xを5ビット左にシフトする。
ア
10進数の11すなわち(1011)2を1ビット左にシフト(けた移動)すると、以下に示すように、値は2倍になります。
┌─┬─┬─┬─┬─┬─┬─┬─┐
│0│0│0│0│1│0│1│1│ 11
└─┴─┴─┴─┴─┴─┴─┴─┘
↓ 1ビット左に桁移動
┌─┬─┬─┬─┬─┬─┬─┬─┐
│0│0│0│1│0│1│1│0│ 22
└─┴─┴─┴─┴─┴─┴─┴─┘
2進数の値を左に1けた移動すると値が2倍になるのは、10進数の値を左に1けた移動すると値が10倍になるのとまったく同じ理由によります。
正解はアです。2ビット左にシフトすると値が4倍になります。これにxを加えると、xの5倍になります。これを再び1ビット左にシフトすると10倍が得られます。