C语言:求一个整数存储在内存中的二进制中1的个数(多种解法)。

题目要求
求一个整数存储在内存中的二进制中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;
}
//这种方式是不是很好?达到了优化的效果,但是难以想到。

你可能感兴趣的:(C语言:求一个整数存储在内存中的二进制中1的个数(多种解法)。)