2009年07月15日

Javaのビット演算のお勉強

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;

この処理の意味がなかなか理解できず、でも、分かってしまえばとても簡単だということに気づき、長時間悩んでしまった自分に対して「俺って阿呆だ……」と深い悲しみに包まれたような解説ページです。