编写一个函数返回参数二进制中1的个数。自己写了一下,觉得挺有意思,总结了3个方法 :
第一种方法:
#include<stdio.h>
int main()
{
int num = 10;//10的二进制位1010
int count = 0;
while (num != 0)
{
num = num&(num - 1);//(1)1010&1001=1000;1000&0111=0000
count++;count
}
printf("1的个数:%d\n", count);
system("pause");
return 0;
}
总结:每一次按位与都将少一个二进制中的1
第二种方法:
#include<stdio.h>
int main()
{
int num =10;
int count = 0;
int i = 0;
for (i = 0; i < 32; i++)//将该数右移32次,每一次与1按位与
{
if ((num>>i)&1 == 1)//若该位为1,结果为1,count+1
count++;
}
printf("1的个数%d\n", count);
system("pause");
return 0;
}
第三种方法:
#include<stdio.h>
int main()
{
int num = 10;
int count = 0;
while (num)
{
if (num % 2 == 1)//模2求余法
count++;
num = num / 2;
}
printf("1的个数=%d\n", count);
system("pause");
return 0;
}