恥ずかしながら、これまでビットシフトを知らなかったんですが、ようやく知りました。
ビット演算は知っているので、勉強したことはあるけど使い道が思い浮かばずに忘れてしまったのかもしれないです。
なんで、今頃ビットシフトなのかというと、とある人が書いたコードを見ていたら「1<<24」と書いてあったんですよ。前後関係から「2の24乗」と読むと全体も理解できるんですが、左シフト演算子「<<」を知らなかったので悩みました。
知っている人には無駄な説明ですが、たとえば10進数の2を3ビット左にシフトする=「2<<3」を考えてみます。
2は2進数では10、これを3ビット左にシフトすると10000です。10000は10進数で16なので、2<<3は16となります。
左にシフトするというのは桁を増やすこと、末尾に0をつけることだと捉えると、2進数だと2倍されることになります(桁が増えると10進数だと10倍になりますよね)。
2の累乗の場合だけですが、ビットシフトで乗算を行うことができるわけですね(右シフトで除算もできます)。
ちなみにperlとphpで実行速度も測定してみましたが、微々たるもの。一番速いのは定数で書く場合ですが、その次は累乗する関数を使う場合で、ビットシフトが一番遅い。といっても1000分の1秒程度の差です。
今の僕だと、ワンライナーで書くときに使うくらいかなあ。1<<24のほうが16777216よりも3文字も短いですし。
No related posts.
