JavaのInteger.bitCountのロジックを追いかけていたら、いつの間にか2時を過ぎていました。
そして気が付いたら、(自分にしては)割とちゃんとした解説ページが出来上がっていました。
intの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;
この処理の意味がなかなか理解できず、でも、分かってしまえばとても簡単だということに気づき、長時間悩んでしまった自分に対して「俺って阿呆だ……」と深い悲しみに包まれたような解説ページです。