整数の中で立っているビット数を求める方法

訂正: 整数中に立っているビット数ではなく、立っているビットの最左位置を求める方法でした。

java.util.BitSetのソース中で、整数中に立っているビット数を数えるメソッドが面白かったので載せてみます。

二分探索をベタ書きしていて、最大6回の比較でビット数が求まります。この方法が最速なのかな。

private static int bitLen(int w) {
    return
     (w < 1<<15 ?
      (w < 1<<7 ?
       (w < 1<<3 ?
        (w < 1<<1 ? (w < 1<<0 ? (w<0 ? 32 : 0) : 1) : (w < 1<<2 ? 2 : 3)) :
        (w < 1<<5 ? (w < 1<<4 ? 4 : 5) : (w < 1<<6 ? 6 : 7))) :
       (w < 1<<11 ?
        (w < 1<<9 ? (w < 1<<8 ? 8 : 9) : (w < 1<<10 ? 10 : 11)) :
        (w < 1<<13 ? (w < 1<<12 ? 12 : 13) : (w < 1<<14 ? 14 : 15)))) :
      (w < 1<<23 ?
       (w < 1<<19 ?
        (w < 1<<17 ? (w < 1<<16 ? 16 : 17) : (w < 1<<18 ? 18 : 19)) :
        (w < 1<<21 ? (w < 1<<20 ? 20 : 21) : (w < 1<<22 ? 22 : 23))) :
       (w < 1<<27 ?
        (w < 1<<25 ? (w < 1<<24 ? 24 : 25) : (w < 1<<26 ? 26 : 27)) :
        (w < 1<<29 ? (w < 1<<28 ? 28 : 29) : (w < 1<<30 ? 30 : 31)))));
}