学习了位运算, & 的用法
思路位运算
以下2步用于看一下第K位数
- 先把第K位移到最后一位 n >> k
- 看个位, x & 1
这样如果我们先令K等于数的长度-1,
然后依次输出第K位在二进制中的数,
然后让K–(k>=0)
这样我们就可以得到某个数的二进制表示了
以10为例
int x = 10;
for(int k = 3; k >= 0; k--)
cout << x & 1;
代码
#include<iostream>
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<<' ';
}
return 0;
}
代码(还不会位运算的时候写的)
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5 + 10;
int a[N], b[N];
int binary_count(int x)
{
int cnt = 0;
while( x != 0)
{
if( x % 2 == 1) cnt ++;
x /= 2;
}
return cnt;
}
int main()
{
int n; cin >> n;
int j = 0;
for(int i = 0; i < n; i++) cin >> a[i];
for(int i = 0; i < n; i ++)
{
b[j] = binary_count(a[i]);
j ++;
}
for(int i = 0; i < n; i++) cout << b[i] << " ";
return 0;
}