LinkedIn にシェア
LINEで送る
Pocket

覚書です。

 

ビット演算子(<<や>>みたいなやつ)って何に使うのだろう。

→ 掛け算、割り算の代わりに使えます。

ある数xを2倍にする時x = x * 2とすると思いますが、これはx = x << 1と描いても同じ結果が得られます。

同様に
x = x << 1 : 2倍 (x = x * 2)
x = x << 2 : 4倍 (x = x * 4)
x = x << 3 : 8倍 (x = x * 8)
x = x << 4 : 16倍 (x = x * 16)
x = x << 5 : 32倍 (x = x * 32)

割り算なら逆に
x = x >> 1 : 1/2 (x = x / 2)
x = x >> 2 : 1/4 (x = x / 4)
x = x >> 3 : 1/8 (x = x / 8)
x = x >> 4 : 1/16 (x = x / 16)
x = x >> 5 : 1/32 (x = x / 32)

ビット演算子を使用する方が普通に掛け算をするよりも演算速度が速いそうです。

 

 

おまけの解説

0000 0001
と8ビットの2進数があった時、現状では10進数に変換すると1です。ここで1ビット左にシフトしてみましょう

0000 0010
1ビット左にずれました、10進数に変換すると2になりました。
続いて2ビットさらに左へシフトしてみましょう

0000 1000
10進数にすると8です。 覚書で描いた通り2つシフトしたら4倍になりましたね。

同様に逆の右へシフトしていけば、半分ずつ減っていくことがわかりますね。

ちなみに溢れた分は失われます。

 

0000 1010
10進数での10を例にしてやってみます。4ビット左へずらしてみましょう

1010 0000
10進数で16倍の160になりました。ここで5ビット右へシフトしましょう

0000 0101
10進数で5になります。