第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倍が得られます。


BohYoh.comトップページへ