title: 位运算
date: 2019-05-27 01:34:01
tags: 位运算
位运算
主要操作
n的二进制表示中的第k位数字 n>>k&1
返回n的最后一位1 lowbit(n)=n&-n
返回的是一个二进制数,最高位是1
n=1010 lowbit(n)=10
n=101000 lowbit(n)=1000
那么 为什么n&-n就可以得到最后一位1呢?
因为 -x=~x+1
lowbit(x)的应用:求一个数二进制中的1的个数
题目:给出一个数列,求数列中每个数的二进制表示中1的个数
输入:
5
1 2 3 4 5
输出:
1 1 2 1 2
#include <iostream>
const int maxn=1e5+5;
using namespace std;
int lowbit(int x)
{
return x&-x;
}
int main()
{
int n,x;
cin>>n;
int cnt;
while(n--)
{
cnt=0;
cin>>x;
while(x)
{
x-=lowbit(x);//关键点
cnt++;
}
cout<<cnt<<" ";
}
cout<<endl;
return 0;
}
unsigned int x
二进制中负数是用补码表示的