写一个函数求某个数对应的二进制中1的个数(牛客)

文章介绍了三种方法来计算一个整数二进制表示中1的个数,包括使用右移操作符、按位与1以及通过n=n&(n-1)的技巧。还探讨了如何判断一个数是否为2的幂次方,并提供了一个通过位操作快速检查的方法。此外,文章还涉及了计算两个数二进制位不同的数量,利用异或和位清除操作实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[该题的牛客链接](https://www.nowcoder.com/questionTerminal/8ee967e43c2c4ec193b040ea7fbb10b8?
在这里插入图片描述


一、方法一:%/达到二进制位右移的效果

//方法一
//         
//10 % 2 -> 0
//10 /= 2 -> 5 -> 101
// 
// 5 % 2 -> 1 -> count+1
// 5 /= 2 -> 2 -> 10
// 
// 2 % 2 -> 0
// 2 /= 2 -> 1 -> 1
// 
// 1 % 2 -> 1 -> count+1
// 1 /= 2-> 0 -> 跳出循环
//count得到就是2 
#include<stdio.h>

int Count(int n)
{
	int count = 0;
	while (n)
	{
		if (n % 2 == 1)
		{
			count++;
		}
		n /= 2;
	}
	return count;
}

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

在这里插入图片描述
代码上方注释也给出了大概解释,这里我再用文字解释一下。
我们拿10举例,10的二进制是1010,共两个1
首先10%2得到结果为0,不做处理
然后再让10/=上2,得到结果为5,此时我们可以注意到,5的二进制是101
然后再让5%2,得到结果是1,此时让count加1
然后再让5/=2,得到结果为2,二的二进制是10
然后可以让2在%2得到结果为0,同样不做处理
然后2/=2得到结果为1,对应二进制就是1
然后

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值