C++ 位运算常用操作 二进制中1的个数
给定一个长度为 n
的数列,请你求出数列中每个数的二进制表示中 1
的个数。
输入格式
第一行包含整数 n
。
第二行包含 n
个整数,表示整个数列。
输出格式
共一行,包含 n
个整数,其中的第 i
个数表示数列中的第 i
个数的二进制表示中 1
的个数。
数据范围
1≤n≤100000
,
0≤数列中元素的值≤109
输入样例:
5
1 2 3 4 5
输出样例:
1 1 2 1 2
(1)求n的二进制数表示中第k位是几?
n >> k & 1
(2)lowbit操作:返回x的最后一位1(返回是一个二进制数)
x & -x
计算过程:
#include <iostream>using namespace std;int n;int main ()
{scanf("%d", &n);while(n -- ){int x;scanf("%d", &x);int res = 0;while(x) {if(x & 1) res ++; // 取x最后一位x = x >> 1; // x 右移一位// lowbit写法// x -= (x & -x); // (x & -x) 就是lowbit操作,每次减去最后一个1,然后res++,减了多少次就有多少个1,比上面那种稍微快一点//res ++;}printf("%d ", res);}return 0;
}