位运算符号
符号 | 运算 |
---|---|
& | 与 |
l | 或 |
~ | 非 |
^ | 异或 |
>> | 右移 |
<< | 左移 |
常用操作
- 求x的第k位数字: x >> k & 1
- lowbit(x) = x & -x,返回x的最后一位1(-x和(取反~x+1)等同)
- 右移k位等价于除一个2的k次方
- 左移k位等价于乘一个2的k次方
- 一个数字源码的负数表示他的补码
习题练习
题目介绍:二进制中1的个数
给定一个长度为 n 的数列,请你求出数列中每个数的二进制表示中 1 的个数。
习题思路
使用lowbit操作,进行,每次lowbit操作截取一个数字最后一个1后面的所有位,每次减去lowbit得到的数字,直到数字减到0,就得到了最终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;
}