题目


a >> k & 1 可以取第该数字的二进制第k位的值
比如 10 >> 2 & 1
10的二进制为 1010 ,右移2位为 0010&10000,也就是0,第二位也是0

参考答案

STL 做法:

#include <iostream>
using namespace std;
int main(void) {
    int n,x;
    cin >> n;
    for(int i = 0;i<n;i++){
        cin >> x;
        cout << __builtin_popcount(x) << " ";
    }
}