//是柱状数组的一个基操作 //返回n的最后一位1:lowbit(n) = n & -n //比如 x=1010 那么返回10 x=101000 返回1000 #include<bits/stdc++.h> 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<<" "; // 二进制中1的个数 } } //
//n的二进制表示中第k位是几 k的下标:个位是第0位,十位是第1位。。。 //比如 n为15,那么二进制位1111 //思路,①先把第k位移到最后一位,也就是把n的第k位数字右移到个位,n>>k //②,取个位,就是x&1 合起来就是n>>k&1 也可以认为是输出二进制表示方法 #include<bits/stdc++.h> using namespace std ; int main() { int n=10; for(int k=3;k>=0;k--) cout<<(n>>k&1); return 0; }