最基本的做法是不斷的除以2,直到結果爲0,這裏做除法是一個比較耗時的操作。這裏給出一個比較快速的算法(核心思想:去掉最低位的1):
代碼1:
a不斷地與自己的相反數-a按位相與(-a相當於a按位取反後加1),相當於排除最右邊的1,然後直到該數變爲0:
#include<stdio.h>
int main() {
int a, b;
int count = 0;
scanf("%d", &a);
while(a) {
count++;
b = a & (-a);//最低位的1
a -= b; // 去掉了最低位的1
}
printf("%d\n", count);
}
代碼2:
a不斷地與(a - 1)按位相與,直至爲0:
#include<stdio.h>
int main() {
int a, b;
int count = 0;
scanf("%d", &a);
while(a) {
count++;
a &= (a -1); //去掉最低位的1
}
printf("%d\n", count);
}