bit数え上げ2
d:id:tkuro:20061129
しつこく食い下がるような問題でもないんだけど、、、
x & (x-1) が 一番右の1のビットをカットすることを利用して、
int enum_bit(unsigned long x) { int counter = 0; while( x ) { counter++; x &= x-1; } return counter; }
うーむ。おくがふくぅぁい。
.L16: leal -1(%edx), %eax incl %esi andl %eax, %edx jne .L16
1であるビットが少ない場合激速ですが、all 1 = 0xffffffff でも164clkでした。。。