首先编写主函数
#include<stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
int n = count_num_of_1(num);
printf("%d\n", n);
return 0;
}
方法一、 对数取余除的方式获得二进制数字
由上图可知,我们通过取余和除的方法依次得到二进制数字,我们可以编写函数
int count_num_of_1(unsigned int x) {
int count = 0;
while (x)
{
if (x % 2 == 1)
{
count++;
}
x = x / 2;
}
return count;
}
运行代码:
测试正确。
方法二、运用位操作符的方法
如上图,我们将整数右移一位,在和1取反(&),如果等于零则整数的二进制最后一位是0,如果等于1,那么最后一位就是1.所以我们可以通过右移的方式判断二进制1的个数,因为整形是4字节,32bit位,所以我们要移动32次。编写下面代码:
int count_num_of_1(int x) {
int count = 0;
int i= 0;
for(i=0;i<32;i++)
{
if (((x>> i) & 1 )== 1)
{
count++;
}
}
return count;
}
方法三、使用n&n-1的方式(很难想到)
如上图,我们举了三个例子,n&(n-1)得到的结果都会消除最右边的一个1,所以我们可以编写函数
int count_num_of_1(int x) {
int count = 0;
while (x)
{
x = x & (x - 1);
count++;
}
return count;
}