求32位整数二进制1的个数

本文介绍两种计算整数二进制表示中1的位数的方法:一种是通过循环右移并检查最低位;另一种是使用位操作n & (n-1)来逐个消除最低位的1,直至整数变为0。

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

#include <iostream>

using namespace std;

int findone(unsigned int n)
{
  
for(int i=0;n>0;n>>=1)
       i
+=(n&1);
  
return i;
}


int main()
{
  
int n;
  cin
>>n;
  cout
<<findone(n)<<endl;
  
return 0;
}
 


int func(unsigned int n)
{
  
int count=0;
  
while(n>0)
    {
        n
&=(n-1);
        count
++;
}

  
return count;
}
### C语言实现计算整数二进制表示中1个数 #### 取余法 通过不断对2取余并累加余数可以统计出二进制表示中有多少个1。每次模操作后,将原数值右移一继续上述过程直到该数值变为零。 ```c int countBitsRemainder(int num){ int cnt = 0; while (num != 0) { cnt += num % 2; // 如果当前最低1,则计数器增加 num /= 2; // 将数字向右移动一相当于去掉最后一 } return cnt; } ``` 此方法简单直观但是效率较低因为涉及到大量的除法运算[^1]。 #### 移法 利用按与(&)以及无符号右移(>>)的操作来逐检测每一是否为1,并且每轮循环都将目标值减半直至其归零为止。 ```c unsigned int countSetBitsShift(unsigned int n){ unsigned int count = 0; while (n) { count += n & 1u; // 判断最右边的一是不是1 n >>= 1; // 把这个数往右移去下一次判断下一个 } return count; } ``` 这种方法相较于前一种性能更优因为它只用了基本逻辑指令而没有复杂的算术运算。 #### 高级计算法——Brian Kernighan’s Algorithm 对于非负整数x来说,`x&(x−1)`会使得x中最右侧的那个'1'变成'0',因此可以通过重复执行这一操作直到整个数变为全0从而得知其中含有几个1. ```c int bitCountBKAlg(unsigned long x){ int bits = 0; while(x!=0){ ++bits; x &= (x - 1); } return bits; } ``` 这种技巧不仅简洁而且高效特别适合处理大范围内的正整数.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值