lowbit()函数可以返回x中最后一个1,这个1就
int lowbit(int x)
{
return x&-x;
}
为什么lowbit()函数可以返回x中最后一个1,我们可以利用这个性质求出x中包含了多少个1
证明:为什么lowbit()会返回x中最后一个1的位置
-x其实就是x的补码,也就是x取反+1,写作为-x=~x+1
例题
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N];
int lowbit(int x)
{
return x&-x;
}
int main()
{
int n;cin>>n;
while(n--)
{
int res=0;
int x;cin>>x;
while(x)x-=lowbit(x),res++; //看一下x有多少个1
cout<<res<<" ";
}
return 0;
}
代码解释: 就拿x=7解释:此时lowbit()会返回
while(7--){7-=1,res++}
while(6--){6-=2,res++}
while(4--){4-=4,res++}
最后res=3,也就是7中包含3个1