(FE)H29年秋 午前 問01

数値を2進数で表すレジスタがある。このレジスタに格納されている正の整数xを10倍する操作はどれか。ここで,桁あふれは,起こらないものとする。

 xを2ビット左にシフトした値にxを加算し,更に1ビット左にシフトする。

 xを2ビット左にシフトした値にxを加算し,更に2ビット左にシフトする。

 xを3ビット左にシフトした値と,xを2ビット左にシフトした値を加算する。

 xを3ビット左にシフトした値にxを加算し,更に1ビット左にシフトする。

解説を読む


正解:ア

解説:
2進数では1ビット左にシフトする度にデータの値は倍になります。すなわち2ビット左にシフトすると元データの4倍、3ビット左にシフトすると元データの8倍の値になります。

本問では元データxを10倍にするという事ですので上記の基本を踏まえて順に考えてみましょう。

ア.xを2ビット左にシフト→xの4倍
  xを加算→xの5倍
  上記の値を1ビット左にシフト→5倍の2倍=xの10倍

イ.xを2ビット左にシフト→xの4倍
xを加算→xの5倍
上記の値を2ビット左にシフト→5倍の4倍=xの20倍

ウ.xを3ビット左にシフト→xの8倍
xを2ビット左にシフト→xの4倍
上記の値を加算→8倍+4倍=xの12倍

エ.xを3ビット左にシフト→xの8倍
xを加算→xの9倍
上記の値を1ビット左にシフト→9倍の2倍=xの18倍

xを3ビット左シフトさせ8倍にした値にxの2倍を加えるという手法が一般的だと思われますので直感的にウ、エを選び間違いやすい問題です。本問ではxを5倍にした後にその値を倍にするという手法が用いられています。

<別解>
簡単な数値をxに代入して実際に計算する事で解答を導き出すこともできます。

x=(10)2=(2)10とします。

ア.(10)2を2ビット左にシフト→(1000)2
(1000)2+(10)2(1010)2
(1010)2を1ビット左にシフト→(10100)2=(20)10

イ.(10)2を2ビット左にシフト→(1000)2
(1000)2+(10)2(1010)2
(1010)2を1ビット左にシフト→(101000)2=(40)10

ウ.(10)2を3ビット左にシフト→(10000)2
(10)2を2ビット左にシフト→(1000)2
(10000)2+(1000)2=(11000)2=(24)10

エ.(10)2を3ビット左にシフト→(10000)2
(10000)2+(10)2=(10010)2
(10010)2を1ビット左にシフト→(100100)2=(36)10

解説を閉じる

コメント