Acwing 位运算

77 阅读1分钟

801. 二进制中1的个数 - AcWing题库

lowbit(x)

lowbit(x)其实就是统计二 x 二进制1的个数。 它的原理实际上是 lowbit(x)=x&(~x+1)。

x&(~x+1)的运算过程如下:

image.png

#include<iostream>
using namespace std;
 
int lowbit(int x)
{
    return x & (-x); 
}
    
int main()
{
   
    int n=0;
    cin>>n;
        while(n--)//n个样例
        {
          int res=0;//注意  res要放while循环里,每个样例都要重新计数
          int x=0;
          cin>>x;//输入样例
          while(x)x-=lowbit(x),res++;//x减去1  能减多少次说明有多少个1   每减一次  res都计数一次,这样就把1个数统计出来了 
          cout<<res<<' ';
        }
        
       
    return 0;
}