この問題を解決し、論理を説明するのを手伝ってください。&演算子がここでどのように機能しているかわかりません。
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
宣言されているためです。static
0
あなたは初期化されていない数を持っています
する必要があります
static int count=0;
演算子 & は AND と呼ばれますhttp://en.wikipedia.org/wiki/Bitwise_operation#AND