ハッカーのたのしみに載ってた。
x &= (x - 1)が凄いね。
これは、x-1でxが0以外だとxを下位ビットからみていって一番最初に1になってるビットが0になる。
それを元の値に対してかければその場所の位置だけを0にできる。
全部が0になるまで繰り返せば終了、この回数をカウントする。
function pop(x) {
var n = 0;
while (x != 0) {
n += 1;
x &= (x - 1);
alert(x);
}
return n;
}
var x = 0xf;
alert(pop(x));