ビット演算によるフラグ操作

近頃の若いもんは、こんなことも知らないの?まあ、今時CPU速いし、メモリいくらでもあるし、こんなこと知らなくても全然困らないのかもしれない。でも、知っておいて損はない知識だと思うけどなぁ…。実際ググればその手のページはいくらでも出てくる、っていうことはC系の言語(C, C++, Java, C#, JavaScript, Perl, PHP, あとRubyも?)では、今も衰えていないコーディングテクニックなんだよね?そもそもこれらの言語全部で演算子同じだし。
つまりその、1ビットの(フラグ属性を持つ)データを定数として定義しておいて、

  • フラグのセットには|, |=(ビットごとのOR)を使う、
  • フラグのテストには&(ビットごとのAND)を使う、
  • フラグのクリアには、&=と~(ビットごとのANDとビット反転)を組み合わせて使う。

っていう話ね。あと、シフト<<, >>もね。昔は掛け算(割り算)は遅いから2(のべき乗)をかける(割る)んだったら、同じことをシフトでやると速い、なんて教わって喜んで使っていたけど、今の人たちは知らないの??
ちなみに「プログラムに、ゼロ掛けるゼロナントカ、って書いてあるんですけど、あれは何ですか?」みたいな質問を受けて、え、それ16進数だけど「ゼロ掛ける」じゃなくて「ゼロエックス」なんだけど知らないの?から始まった話。