この問題を解決し、論理を説明するのを手伝ってください。&演算子がここでどのように機能しているかわかりません。
void main() {
int a = -1;
static int count;
while (a) {
count++;
a &= a - 1;
}
printf("%d", count);
}
この問題を解決し、論理を説明するのを手伝ってください。&演算子がここでどのように機能しているかわかりません。
void main() {
int a = -1;
static int count;
while (a) {
count++;
a &= a - 1;
}
printf("%d", count);
}
あなたが言及している場合
a&=a-1;
次に、それは a と a-1 のビット単位の操作であり、後で a にコピーされます。
編集:コメントでTadeusz A. Kadłubowskiからコピーされたとおり:
a = a & (a-1);
この式a&=a-1;は、 の最下位ビット (右端の 1) をクリアしますa。aコードは(この場合は -1)のビット数をカウントします。
から始まる
a = -1 ; // 11111111 11111111 11111111 11111111 32bits signed integer
コード32は 32 ビット整数構成で出力します。
&はビットごとの and 演算子です。
操作
a&=a-1;
これは次と同じです:
a = a & a-1;
の最下位ビットをクリアしますa。
したがって、プログラムは で設定されたビット数を効果的に計算していますa。
は自動的に に初期化されるため、count宣言されているためです。static0
あなたは初期化されていない数を持っています
する必要があります
static int count=0;
演算子 & は AND と呼ばれますhttp://en.wikipedia.org/wiki/Bitwise_operation#AND