首先第一种方法:通过%2可以得到想要的位数,通过/2可以移除该位
//方法1
int count_bit_one(unsigned int n)
{
int count=0;
while(n){
if(n%2==1){
count++;
}
n=n/2;
}
return count;
}int main()
{
int a=13;
scanf("%d",&a);
int count=count_bit_one(a);
printf("count=%d\n",count);
return 0;
}
要注意的是int 前面要加上unsigned,这样当输入的数字为负数时也不会出错
第二种方法:通过按位与&以及移位符>>向右移位数字计数得到1的个数
//方法2
int count_bit_one(int n)
{
int count=0;
int i=0;
for(i=0;i<32;i++){
if(((n>>i)&1)==1){
count++;
}
}
return count;
}
int main()
{
int a=13;
scanf("%d",&a);
int count=count_bit_one(a);
printf("count=%d\n",count);
return 0;
}
第三种方法:
//方法3(最高效)
int count_bit_one(int n)
{
int count=0;
while(n){
n=n&(n-1);
count++;
}
return count;
}
int main()
{
int a=13;
scanf("%d",&a);
int count=count_bit_one(a);
printf("count=%d\n",count);
return 0;
}