請幫助解決這個問題並解釋邏輯。 我不知道&運營商如何在這裏工作。什麼是按位AND運算符&做什麼?
void main() {
int a = -1;
static int count;
while (a) {
count++;
a &= a - 1;
}
printf("%d", count);
}
請幫助解決這個問題並解釋邏輯。 我不知道&運營商如何在這裏工作。什麼是按位AND運算符&做什麼?
void main() {
int a = -1;
static int count;
while (a) {
count++;
a &= a - 1;
}
printf("%d", count);
}
如果你指的是
a&=a-1;
那麼它複製到一個事後的按位與運算和A-1。
編輯: 作爲從塔德烏什·A.Kadłubowski在評論複製:
a = a & (a-1);
它幾乎與a = a&(a-1)相同;' – 2011-03-04 10:06:47
@Tadeusz複製並歸因於您的評論,並提出您的評論,thnx – 2011-03-04 11:06:37
它可能是重要的是要注意,對於'a'的某些值,這個表達式可能不等同。考慮'#define a(++ b)'爲其他變量'b'。爲了防止OP是CS學生學習C的複雜性,稍作澄清。 – 2011-03-04 11:43:51
操作
a&=a-1;
其是相同:
a = a & a-1;
清除的a
的至少顯著位。
所以你的程序有效地計算了在a
中設置的位數。
而且由於count
被宣佈爲static
它會自動初始化爲0
。
的的a
表達a&=a-1;
清除至少顯著位(最右1)。該代碼計算a
(在這種情況下爲-1)中的位數。
從
a = -1 ; // 11111111 11111111 11111111 11111111 32bits signed integer
代碼輸出32
上的32位整數配置開始。
count應該按照 – Andrew 2011-03-04 10:03:47
的方式初始化問題是什麼?你期望的答案是什麼? – MAK 2011-03-04 10:05:53
看起來很像:http://stackoverflow.com/questions/109023/best-algorithm-to-count-the-number-of-set-bits-in-a-32-bit-integer/109036#109036 – sarnold 2011-03-04 10:06:50