1であるビット数を数えるコード

http://www.mwsoft.jp/programming/java/java_lang_integer_bit_count.html

i = i - ((i >>> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
i = (i + (i >>> 4)) & 0x0f0f0f0f;
i = i + (i >>> 8);
i = i + (i >>> 16);
return i & 0x3f;

理由はよくわからないが、2ビットの数から上位ビットが1なら1引くと、なぜか1であるビット数が求まる。具体例は以下。

数えたい数 → 計算 → 1であるビットの数
00 → 00 - 0 → 00
01 → 01 - 0 → 01
10 → 10 - 1 → 01
11 → 11 - 1 → 10

これを2ビットごとにデータを区切って、一気にやっているのが最初の行。
その後、2ビットごとを集計して4ビットにし、4ビットを集計して8ビットにし、8ビットを集計して16ビットにし、16ビットを集計して32bit全体のビット数カウントにする。
ちなみに「>>>」は「符号なし右シフト」の演算子である。