int fn(unsigned int x)
{
int count = 0 ;
for(; x!=0; x&=(x-1))
count ++;
return count;
}
コンパイラで試してみましたが、何が起こっているのかわかりませんでした。のビット数と関係があると思いますx
が、何ですか?
int fn(unsigned int x)
{
int count = 0 ;
for(; x!=0; x&=(x-1))
count ++;
return count;
}
コンパイラで試してみましたが、何が起こっているのかわかりませんでした。のビット数と関係があると思いますx
が、何ですか?
ちょっとしたトリックです。:)
に設定されたビット数を返しています1
。
私はあなたがしたことを説明します:)
あなたのコードによると、 x = 5 の場合、次のようになります
1) ループの最初の繰り返しで、
a) condition check : .... 0101(X) ! = 0 ,
b) body : count will be 1 ;
c) increment part : .... 0101 &= .... 0100 => .... 0100
2) 2 回目のイテレーションで
a) condition check : .... 0100(X) ! = 0 ,
b) body : count will be 2 ;
c) increment part : .... 0100 &= .... 0011 => .... 0000
カウントは、X(5) に設定されたビット数である 2 に等しくなります。