予告していたInteger.reverseです。DVD見ながら書いてたら、4時を過ぎてしまった。明日(というか今日)も用事があるのに。恐ろしい。。。
Integer.reverse( int ) の処理を追ってみる
http://www.mwsoft.jp/programming/java/java_lang_integer_reverse.html
若干、寝ぼけて書いてます。間違いがあった場合は、見つけ次第直していきます。
処理事態は、こんな感じの子です。
i = (i & 0x55555555) << 1 | (i >>> 1) & 0x55555555;
i = (i & 0x33333333) << 2 | (i >>> 2) & 0x33333333;
i = (i & 0x0f0f0f0f) << 4 | (i >>> 4) & 0x0f0f0f0f;
i = (i << 24) | ((i & 0xff00) << 8) | ((i >>> 8) & 0xff00) | (i >>> 24);
面白いかなぁと思ったのですが、bitCountとかなり内容が被ってました。次回に期待。
ところで、検証コードを書いている時に間違って
for( int i = Integer.MIN_VALUE; i <= Integer.MAX_VALUE; i++ )
って書いて無限ループを発生させてみた。
intはInteger.MAX_VALUEを超える値になろうとすると、溢れてマイナスになるので永遠に条件を満たさないという、こっそり混入して他人を貶める目的で使えそうな記述だなぁと思いました。