位运算
n
的二进制表示中第k
位是几
步骤:
- 把
n
的第k
位右移到第0
位的地方 , - 看一下此时的个位是几?
n' &1
lowbit
树状数组的基本操作!!还是非常重要的
作用:==返回x
对应二进制的 最后一位1及其右边的所有0==
实现惊人的简单!!
应用:统计x
里面1的个数。每次去掉最后一个1,一直到完全减完,减了多少次就有多少个1。也就是统计使用了几次lowbit
// 5次轮询,分别输入5个数,判断每个数有多少个1
#include <iostream>
// 对每个数使用多次lowbit,一直到无法使用为止
using namespace std;
int lowbit(int x){
return x&-x; //返回的是int
}
int main(){
int n;
cin >> n;
while(n--){
int x;
cin >> x;
int cnt = 0;
while(x) x= x - lowbit(x),cnt++;
cout << cnt << " ";
}
return 0;
}