3

この問題を解決し、論理を説明するのを手伝ってください。&演算子がここでどのように機能しているかわかりません。

void main() {
   int a = -1;
   static int count;
   while (a) {
      count++;
      a &= a - 1;
   }
   printf("%d", count);
}
4

4 に答える 4

5

あなたが言及している場合

a&=a-1;

次に、それは a と a-1 のビット単位の操作であり、後で a にコピーされます。

編集:コメントでTadeusz A. Kadłubowskiからコピーされたとおり:

a = a & (a-1);
于 2011-03-04T10:04:22.630 に答える
3

この式a&=a-1;は、 の最下位ビット (右端の 1) をクリアしますaaコードは(この場合は -1)のビット数をカウントします。

から始まる

a = -1 ; // 11111111 11111111 11111111 11111111 32bits signed integer

コード32は 32 ビット整数構成で出力します。

于 2011-03-04T10:06:38.220 に答える
2

&ビットごとの and 演算子です。

操作

a&=a-1;

これは次と同じです:

a = a & a-1;

の最下位ビットをクリアしますa

したがって、プログラムは で設定されたビット数を効果的に計算していますa

は自動的に に初期化されるため、count宣言されているためです。static0

于 2011-03-04T10:06:29.410 に答える
0

あなたは初期化されていない数を持っています

する必要があります

static int count=0;

演算子 & は AND と呼ばれますhttp://en.wikipedia.org/wiki/Bitwise_operation#AND

于 2011-03-04T10:06:31.213 に答える