求整数n的二进制表示中第k位数字是几
最右边那位为第0位,往左依次为第一位,第二位......
1.把第k位移到第0位 n>>k
2.看一下第0位是几 x&1
#include<iostream>
using namespace std;
int main()
{
int n=10;
for(int k=3;k>=0;k--) cout<<(n>>k&1);
return 0;
}
返回n的最后一位1
如:
10的二进制为1010,lowbit(10)=10
24的二进制为20,lowbit(20)=100
lowbit(n)=n&-n
应用:给定一个长度为n的数列,求出数列中每个数的二进制表示中1的个数
#include<iostream>
using namespace std;
int lowbit(int x)
{
return x&-x;
}
int main()
{
int n;
cin>>n;
while(n--){
int x;
cin>>x;
int res=0;
while(x){
x-=lowbit(x);
res++;
}
cout<<res<<' ';
}
return 0;
}