整数n的二进制表示中第k位是多少
$n=15=(1111)_2$
1. 先把第k位移到最后一位n>>k
2. 看个位是几,x&1
即n>>k&1
lowbit(x):返回x的最后一位1
x=1010,lowbit(x)=10
x=101000,lowbit(x)=1000
表达式:x&-x = x&(~x+1)
作用:求二进制中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); //每次减去x的最后一位1
res ++;
}
cout<<res<<' ';
}
return 0;
}
👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍
👍