【お題】NEW演歌

 2進数の値を左へn桁移動すると、もとの値の2^n倍になる。
例えば、左へ2ビット桁移動するともとの値の4倍となる。
 この性質を利用して、左へ桁移動した値を複数加えることで行う乗算を考える。
なお、ここでは、桁移動して空いたビットには0が入るものとし、負数は考えないものとする。
左へ桁移動する関数として、"SHIFT(値、桁数)"を使う。
この関数は、引数の"値"を"桁数"ビット左へ桁移動した結果を返す。
 もとの値をaとし、これを10倍するには、2倍した値と8倍した値を加えればよいので、次のような式になる。
 SHIFT(a,1)+SHIFT(a,3)

また別の考え方で10倍しようとすると、次のような式になる。
 SHIFT((SHIFT(a,x)+a),y)

答えはx=2 y=1

です。

解説をお願いします。

A 回答 (1件)

2進数表記するとわかりやすいんじゃない?



0b1 を 2倍 → 0b10
0b1 を 8倍 → 0b1000

0b1 の 10倍 → 0b1010

後述の式のカラクリは まず0b101にしてshiftしても0b1010になるから一緒じゃない? って考え

この回答への補足

2進表記で考えたらさらに分からなくなりました・・・

補足日時:2011/09/09 17:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報