位运算

x>>n的意思是x转化为2进制后右移n位

lowbit(x) 的意思是(x&-x )返回值为x的最后一个1

例如 二进制表示101001 返回值用二进制表示1

10100 返回值用二进制表示是100

例题

二进制中1的个数

描述

 

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

 

输入

 

第一行包含整数n。

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

1≤n≤100000, 0≤数列中元素的值≤10^9

 

输出

 

共一行,包含n个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中1的个数。

 

输入样例 1

5
1 2 3 4 5

输出样例 1

1 1 2 1 2

 

C++代码

#include<iostream>using namespace std;
​
int lowbit(int x)
{
    return x&-x;
}
int n,x,cnt;
int main()
{
    cin>>n;
    while(n--)
    {   
        cnt=0;
        cin>>x;
        while(x) x-=lowbit(x),cnt++;
        cout<<cnt<<' ';
    }
}

 

原理

x&-x

-x的意思是~x+1

例如 (以下皆为二进制表示)

x=100100

~x=011011

~x+1=011100

x&(~x+1)=100;

 

posted @ 2021-08-30 11:47  喵喵不嗷唔  阅读(61)  评论(0)    收藏  举报