位运算操作
取x的二进制表示时的第k位数字
1. x = 10 = 1010(2)
2. 从低位到高位(右到左),依次为0,1,2,3位
3. x >> k & 1 表示x的第k位
lowbit(x)操作
1. 返回x的最地位1及后面的0所表示的10进制数字,是2的倍数
2. lowbit(10) = 2 = 10(2)
3. 原理:-x = ~x + 1, 10 | 10 & (01 | 01 + 1) = 10 | 10 & (01 | 10) = 10
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int lowbit(int x) {
return x & -x;
}
int main() {
int n;
cin >> n;
while (n--) {
int x;
scanf("%d", &x);
int res = 0;
while (x) x -= lowbit(x), res++;
printf("%d ", res);
}
return 0;
}