求二进制中1的个数

本文介绍了计算一个整数在二进制表示下1的个数的三种方法:通过判断最后一位、按位操作符和使用特定表达式。每种方法都通过示例代码详细解释了其工作原理,并提供了主函数示例来验证实现。这些方法对于理解和优化二进制操作具有重要意义。
摘要由CSDN通过智能技术生成

方法1、

在电脑内存中存放的数据是二进制存放的,我们可以观察二级制的特点

 

通过观察一些数的二进制我们可已看出一个偶数的最后一个二进制位是0,奇数的最后一个二进制位是1;利用这个特性我们得到二进制中1的个数。其中unsigned int 可以很好的解决求负数的问题。

int is_number_of_1(unsigned int x)
{
	int count = 0;
	while (x)
	{
		//第一种方法
		//6
		//00000000 00000000 00000000 00000110
		//3
		//00000000 00000000 00000000 00000011
		if (x % 2 == 1)
		{
			count++;
		}
		x >>= 1;
	}
	return count;
}
int main()
{
	int a = 0;
	scanf("%d", &a);
	int ret = is_number_of_1(a);
	printf("%d", ret);
	return 0;
}

 方法2、

利用按位操作符

int is_number_of_1(unsigned int x)
{
	int i = 1;
	int count = 0;
	while (i<=32)
	{
		//000000000 000000000 000000000 000000001
		//利用按位&
		//相同为1
		//相异为0
		if ((x & 1) == 1)
		{
			count++;
		}
		x >>= 1;
		i++;
	}
	return count;
}
int main()
{
	int a = 0;
	scanf("%d", &a);
	int ret = is_number_of_1(a);
	printf("%d", ret);
	return 0;
}

方法3、

利用表达式x=x&(x-1)

起原理如图

不断产生新的x,知道x=0位置,这个表达式会把x最右边的1去掉。

也就是进行几次x=x&(x-1)即二进制中1的个数就有几个。

int is_number_of_1(unsigned int x)
{
	int count = 0;
	while (x)
	{
		x = x & (x - 1);
		count++;
	}
	return count;
}
int main()
{
	int a = 0;
	scanf("%d", &a);
	int ret = is_number_of_1(a);
	printf("%d", ret);
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值