位运算
x=1010
原码:000...1010 (一共32位)
反码:111...0101 (~x)
补码:111...0110 (反码+1)(-x)
1、n 的二进制表示中第 k 位是几
#include<iostream>
using namespace std;
int main()
{int n;cin>>n;int k;cin>>k;cout<<(n>>(k-1)&1);return 0;
}
2、n 的二进制表示中有几个1
lowbit(x)返回 x 的最后一位 1
x=1010 lowbit(x)=10
x=101000 lowbit(x)=1000
x&-x = x&(~x+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<<endl;}return 0;
}