输入一位整数,获取该数在内存中的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()
{
//统计一个数的二进制表示中有几个1
int a = 0;
int count = 0;
scanf("%d", &a);
count = count_bit_one(a);
printf("%d\n", count);
return 0;
}
方法二:
int count_bit_one(int a)
{
int i = 0;
int count = 0;
for(i=0; i<32; i++)
{
if(((a >> i) & 1) == 1)
count ++;
}
return count;
}
int main()
{
//统计一个数的二进制表示中有几个1
int a = 0;
int count = 0;
scanf("%d", &a);
count = count_bit_one(a);
printf("%d\n", count);
return 0;
}
方法三:
int count_bit_one(int a)
{
int count = 0;
while(a)
{
a = a & (a-1);// a&(a-1)让二进制中最右边的1消失
count++;
}
return count;
}
int main()
{
//统计一个数的二进制表示中有几个1
int a = 0;
int count = 0;
scanf("%d", &a);
count = count_bit_one(a);
printf("%d\n", count);
return 0;
}
这里最推荐的是方法三,效率高。