此题的解决思路为:
方法一:要确定二进制中1的个数,可以通过模2除2的方法来实现。
但是定义以及传参的时候要使用unsigned,否则负数没法进行计算,若传递以及接收都使用无符号,则例如-1,传递过去的就是32个1。
具体代码如下:
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <stdlib.h>
int count_one_bits(unsigned int value)
{
int count = 0;
while (value)
{
if (value % 2 == 1)
{
count++;
}
value = value / 2;
}
return count;
}
int main()
{
unsigned int num = 0;
int ret = 0;
scanf("%d", &num);
ret = count_one_bits(num);
printf("count=%d\n", ret);
system("pause");
return 0;
}
方法二:若计算n的二进制中1的个数,可以通过n&n-1来实现。
具体代码如下:
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <stdlib.h>
int count_one_bits(int n)
{
int count = 0;
while (n)
{
n = n & n - 1;
count++;
}
return count;
}
int main()
{
int num = 0;
int ret = 0;
scanf("%d", &num);
ret = count_one_bits(num);
printf("count=%d\n", ret);
system("pause");
return 0;
}