位运算模板
1、求n的第k位数字: n >> k & 1
2、返回n的最后一位1:lowbit(n) = n & -n
例题1
分别求出数字n的个二进制位数
#include <iostream>
using namespace std;
int main()
{
int n = 10;
for(int k = 3; k >= 0; k--) cout << (n >> k & 1);
return 0;
}
测试样例
输入样例
n=10
输出样例
1010
例题2
给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。
#include <iostream>
using namespace std;
int lowbit(int k)
{
return k & -k;
}
int main()
{
int n;
cin >> n;
while(n--)
{
int k;
cin >> k;
int res = 0;
while(k)
{
k -= lowbit(k);
res++;
}
cout << res << ' ';
}
return 0;
}
测试样例2
输入样例
5
1 2 3 4 5
输出样例
1 1 2 1 2