位运算--算法基础课

79 阅读1分钟

模板

求n的第k位数字: n >> k & 1
返回n的最后一位1lowbit(n) = n & -n

求n的第k位数字 n >> k & 1 :先把第k位数移到最右,再看n的个位数是几

例题

www.acwing.com/problem/con…

给定一个长度为 nn 的数列,请你求出数列中每个数的二进制表示中 11 的个数。

输入格式

第一行包含整数 nn

第二行包含 nn 个整数,表示整个数列。

输出格式

共一行,包含 nn 个整数,其中的第 ii 个数表示数列中的第 ii 个数的二进制表示中 11 的个数。

数据范围

1n1000001 \le n \le 100000,
0数列中元素的值1090 \le 数列中元素的值 \le 10^9

输入样例:

5
1 2 3 4 5

输出样例:

1 1 2 1 2
#include <bits/stdc++.h>
using namespace std;
int n,x;

int main(){
	cin>>n;
	while(n--){
		cin>>x;
		int res=0;
		while(x){
			if(x&1) res++;
			x>>=1;
		}
		cout<<res<<" ";
	}
	

	return 0;
}