C语言,求一个整数存储在内存中的二进制中的1的个数。

以n和1来按位与,1的二进制只有第一位是1,按位与是相同位数只有都为一,结果的对应位数才为1,若n的二进制第一位是1,n & 1的结果就是1,若n的二进制第一位是0,n & 0的结果就是0,就能判断n的二进制第一位是不是1,后面的位数又该怎么判断呢?

这时候右移位操作符就派上用场了。右移操作符能让二进制的位数往右移动,只要每检测完一位,就让位数右移一位,将三十二位用循环一一检测,就能检测出1的个数。

如代码所示:

#include 
int num(int n)
{
	int a = 0;
	int i = 0;
	while (i < 32)
	{
		a = a + (n & 1);
		n = n >> 1;
		i++;
	}
	return a;
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int c = num(n);
	printf("%d", c);
	return 0;
}

你可能感兴趣的:(c语言)