lowbit(x) : 返回x二进制表示的最后一位1;
eg:
lowbit(10) : 即返回10的二进制表示:1010的最后一位1:即10;
10010101000 最后一位1为1000;
代码实现:
int lowbit(int x)
{ return x&(-x);
}
ps:
-x指对先求反码再加一;
之后对x进行&运算可以得到最后一位1;
ps:
1&1=1;
1&0=0;
0&0=0;
#include<iostream>
using namespace std;
int lowbit(int x)
{
return x&(-x);
}
int main()
{
int n;
int x;
cin>>n;
int res=0;
while(n--)
{
cin>>x;
while(x)x-=lowbit(x),res++;
cout<<res<<" ";
res=0;
}
return 0;
}