「ビット演算の超魔術」を書くに際して、いくつかの本を読んでみている。
(書くことが決まったわけではない。勝手に調べてるだけ)

まずは「Hacker's Delight」。
Lucilleの作者もお勧めしてたんで買ってみた。
名前とは裏腹にビット演算系の書籍だ。
ぱっと見、半分以上知ってるテクなんだけどな..

しかし、「Effective Java Programming」で有名なJosh Bloch氏も
本の裏に「この本、すごーだ!おまえの本棚のKnuth本の横にならべとけ!」
とコメントを寄せている。まあ、それくらいの価値はある。



その中で32bit整数の0になっているbitの数を数えるというセクションがある。その話題自体はよくあるものだが、ひとつだけ知らないテクが載っていた。そしてそれは驚愕に値するものだった。


int nlz(unsigned k){
union {
unsigned asInt[2];
double asDouble;
};
int n;
asDouble = (double)k + 0.5;
n = 1054 - (asInt[LE] >> 20); // little endianなら1,big endianなら0
return n;
}

( Д)゜゜ using IEEE floating point!!!