位运算
(1)二进制的第k位数
# include<iostream>
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 <iostream>
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<<" ";
}
}