C--统计二进制中1的个数

Posted L_add

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C--统计二进制中1的个数相关的知识,希望对你有一定的参考价值。

统计二进制中1的个数

题目内容:写一个函数返回参数二进制中1的个数
例如:
15
00001111
4个1

int count_one(size_t num)//size_t 无符号(方便接受负值)
{
	int count = 0;
	while (num)
	{
		if (num % 2 == 1)
			count++;
		num /= 2;
	}
	return count;
}
int main()
{
	int num;
	scanf("%d", &num);
	int ret = count_one(num);
	printf("%d\\n", ret);
	return 0;
}

优化:右移

int count_one(int n)
{
	int count = 0;
	for (int i = 0; i < 32; i++)
	{
		if (((n >> i) & 1) == 1)
			count++;
	}
}

int main()
{
	int num;
	scanf("%d", &num);
	int ret = count_one(num);
	printf("%d\\n", ret);
	return 0;
}

循环32次,再优化

在这里插入图片描述

int count_one(int n)
{
	int count = 0;
	while (n)
	{
		n = n & (n - 1);
		count++;
	}
	return count;
}
int main()
{
	int num;
	scanf("%d", &num);
	int ret = count_one(num);
	printf("%d\\n", ret);
	return 0;
}

以上是关于C--统计二进制中1的个数的主要内容,如果未能解决你的问题,请参考以下文章

[C语言]习题练习3

统计二进制数中的1的个数

C语言 判断一个数的二进制数第7位是不是为1

统计‘1’的个数

位运算--统计一个数的二进制序列中1的个数

统计整数中1的个数