ビット演算>左シフトと論理積による全ビット検査

左シフト(<<)と論理積(&)を使って、全ビットを検査するコードはよく使うので紹介しておく。

int x;
x に何らかの値を設定;
int bitCount = 0;
for(int mask=1; mask != 0; mask<<=1) {
  if( (x & mask) != 0 )
    ++bitCount;
}

上記は、x の全ビットを調べ、ビットの値が1であれば bitCount をインクリメントすることで、 x の中の値が1のビットの数を計算するコードだ。
mask の値は最初 1 で、ループ毎に左にシフトされて行き、上位ビットから溢れた時点でループを終了する。

このように、ループとシフトとビット演算を使うことはよくあるので、ちゃんと理解し、マスターしてほしい。