2
int fn(unsigned int x)
{
int count = 0 ;
for(; x!=0; x&=(x-1))
    count ++;
return count;
}

コンパイラで試してみましたが、何が起こっているのかわかりませんでした。のビット数と関係があると思いますxが、何ですか?

4

2 に答える 2

9

ちょっとしたトリックです。:)

に設定されたビット数を返しています1

于 2013-04-08T10:30:24.373 に答える
0

私はあなたがしたことを説明します:)

あなたのコードによると、 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 に等しくなります。

于 2013-04-08T10:44:59.447 に答える