计算n bit的整数中有多少bit 为1

例如“7”,里面有3个1:111;

移位,位运算比较方便。

n & (n-1),那么二进制n从右往左第一个1变为0;

#include <iostream>
using namespace std;

int main()
{
	int n;
	while(cin >> n)
	{
		int cnt = 0;
		/*
		while(n)
		{
			if(n & 1 == 1)
				cnt++;
			n = n >> 1;
		}
		cout << cnt << endl;
		*/
		
		while(n)
		{
			n = n & (n - 1);
			cout << n << endl;
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您好,变量a中有多少个1可以通过以下代码来求解: int count_ones(uint32_t a) { int ones = 0; while (a != 0) { ones += (a & 1); a = a >> 1; } return ones; } 其中,uint32_t是无符号32位整型,通过按位与运算符&和右移运算符>>找出二进制表示中的每一个1,然后将其逐个加起来。 ### 回答2: 对于一个32位的变量a,我们可以使用位运算来统计其中1的个数。一个简单的方法是使用一个循环,对a进行32次迭代,每次检查a的最低位是否为1,如果是则计数加一,然后将a右移一位。代码示例如下: ``` int count = 0; // 初始化计数器为0 for (int i=0; i<32; i++) { if ((a & 1) == 1) { count++; } a = a >> 1; } ``` 另一种更高效的方法是使用Brian Kernighan算法,该算法利用了一个性质:将一个数减去1,会将其最右边的1及其右边的0都变成1。因此,我们可以不断将a与a-1相与操作,直到a为0,每次操作都会将a的最右边的1变为0,计数增加1。代码示例如下: ``` int count = 0; while (a != 0) { a = a & (a-1); count++; } ``` 这两种方法都可以统计32位变量a中1的个数,第一种方法逐位检查,时间复杂度为O(32),第二种方法根据二进制中1的个数直接计算,时间复杂度为O(1)。但是在实际应用中,由于编译器对位运算进行了优化,两种方法的效率差别并不大。 ### 回答3: 对于一个32位的变量a,我们可以通过遍历每一位来计算出其中有多少个1。 我们可以用一个循环来遍历32位中的每一位,从最低位到最高位。首先初始化一个变量count为0,表示1的个数。 在每一次循环中,我们可以使用位掩码操作(bit masking)来检查当前位是否为1。我们可以通过将1左移i位,得到一个只有第i位为1的数字mask。然后,我们可以使用按位与操作符&将a和mask进行位运算,如果结果不为0,则表示第i位是1。在这种情况下,我们将count加1。 最后,循环结束后,变量count的值就是a中1的个数。 以下是一个示例代码: ```python count = 0 for i in range(32): mask = 1 << i if a & mask != 0: count += 1 print("变量a中有", count, "个1.") ``` 注意,该示例代码中的变量a需要提前定义并赋值。该方法可以用于任何32位的整数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值