题目要求
求一个整数存储在内存中的二进制中1的个数。
代码如下
方法一:
#include
#include
int main()
{
int num = 3;
int count = 0;
while (num)
{
if (1 == num%2)
count++;
num = num/2;
}
printf ("二进制1的个数 = %d\n",count);
system ("pause");
return 0;
}
//思考这样的实现方式有没有问题?
方法二:
#include
#include
int main()
{
int num = -1;
int i = 0;
int count = 0;
for (i = 0; i < 32; i++)
{
if (1 == ((num>>i)&1))
count++;
}
printf ("二进制中1的个数 = %d\n",count);
system ("pause");
return 0;
}
//思考还能不能更加优化,这里必须循环32次的。
方法三:
#include
#include
int main()
{
int num = -1;
int i = 0;
int count = 0;
while (num)
{
count++;
num = num&(num-1);
}
printf ("二进制中1的个数 = %d\n",count);
system ("pause");
return 0;
}
//这种方式是不是很好?达到了优化的效果,但是难以想到。