【ACwing】一、位运算:二进制的第k位数+lowbit(x)+801. 二进制中1的个数

位运算

(1)二进制的第k位数

# include
using namespace std;
int main()
{
    int n = 10,k;
    cin>>k;
    printf("%d",n>>k&1);
}

(2)lowbit(x)最后一位一

lowbit(x)最后一位一的意思是,求一个数的二进制表示中最后出现的1的十进制值,感觉有点拗口。举个例子:14=(1110) 2 _2 2, lowbit(14)=(10) 2 _2 2=2; 24=(11000) 2 _2 2 ,lowbit(24)=(1000) 2 _2 2=8

AcWing 801. 二进制中1的个数

利用lowbit(x)求取每个1的位置后再将其减掉,同时res++,直至x中不存在1即可得到二进制中1的个数res。

# include 
using namespace std;
int lowbit(int x)
{
    return x & -x;
}
int x;
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        cin>>x;
        int res=0;
        while(x)//直至x为0,此时不存在1
        {
            x -= lowbit(x);//减掉每个1
            res++;
        }
        cout<<res<<" ";
    }
}

你可能感兴趣的:(算法,c++,数据结构,算法)