ビットシフト(ビット演算子)に関する覚書

2018年12月18日C/C++,JavaScript,Programming,TECHNOLOGY

覚書です。

 

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

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

ある数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になります。

 

プロセッサを支える技術  --果てしなくスピードを追求する世界 (WEB+DB PRESS plus)

プロセッサを支える技術  --果てしなくスピードを追求する世界 (WEB+DB PRESS plus)

Hisa Ando
2,780円(09/23 00:35時点)
発売日: 2011/01/06
Amazonの情報を掲載しています
新版 明解C++ 中級編 (明解シリーズ)

新版 明解C++ 中級編 (明解シリーズ)

柴田 望洋
6,360円(09/23 08:20時点)
発売日: 2014/03/25
Amazonの情報を掲載しています
改訂 ARMプロセッサ―32ビットRISCのシステム・アーキテクチャ (Design Wave BOOKS)

改訂 ARMプロセッサ―32ビットRISCのシステム・アーキテクチャ (Design Wave BOOKS)

Steve Furber
9,800円(09/23 00:35時点)
発売日: 2001/11/01
Amazonの情報を掲載しています
動かしながら学ぶRXマイコン活用法 (Tech Iシリーズ)

動かしながら学ぶRXマイコン活用法 (Tech Iシリーズ)

4,180円(09/23 00:35時点)
発売日: 2012/10/20
Amazonの情報を掲載しています