头文件
bitset是用来存放bit位元素的,由于每个元素(0或1)只占1bit位,因而可以节约空间(相比于8bit位的bool型变量)。在c++ stl中,提供了操作位的容器,使用前包含头文件即可。
相关操作
1.创建bitset对象
如bitset<100> b,它能容纳100位比特位&#xff0c;每位上的初始值为0
注意&#xff1a;bitset的大小在定义时确定&#xff0c;定义后不能修改
2.设定元素值
- 下标法&#xff0c;b[i],下标i的取值从0到n-1
- b.set()&#xff0c;对b中所有元素设置为1&#xff08;默认为0&#xff09;
- b.reset()&#xff0c; 对b中所有元素设置为0
- b.set(pos,val) 等价于 b[pos]&#61;val
- b.reset(pos) 等价于b[pos]&#61;0
3.其他操作
操作 | 功能 | 用法 |
---|
test(pos) | pos位是否为1&#xff1f; | b.test(4) |
any() | 任意位是否为1&#xff1f; | b.any() |
none() | 是否没有位为1&#xff1f; | b.none() |
count() | 值是1的位数 | b.count() |
size() | 位数 | b.size() |
flip() | 翻转所有位 | b.flip() |
flip(pos) | 翻转pos位 | b.flip(4) |
同样&#xff0c;位运算符 & | ^ ~ <<也适用于bitset
常用以上操作来做集合运算&#xff0c;以减少时间常数
4.输出元素
- 逐个输出&#xff0c;采用下标法&#xff1a;cout<
- 整体输出&#xff0c;即全部输出:cout<
5.样例1
#include
using namespace std;int main()
{bitset<100> b;cout<int n;cout<"下面将十进制数转为二进制,请输入十进制数"<cin>>n;int index&#61;0;while(n){b[index&#43;&#43;]&#61;n%2;n/&#61;2;}cout<<"二进制为"<for(int i&#61;index-1;i>&#61;0;i--){cout<return 0;
}
6.样例2
#include
using namespace std;const int maxn&#61;30;int main()
{bitset b1,b2,b3;for(int i&#61;0;i2;}cout<for(int i&#61;0;i1)%2;}cout<cout<cout<cout<return 0;
}
截图
LeetCode 190 Reverse Bits
题目大意
reverse bits of a given 32 bits unsigned interger
For example, given input 43261596 (represented in binary as 00000010100101000001111010011100), return 964176192 (represented in binary as 00111001011110000010100101000000).
思路
bitset存
代码示例
#include
#include
#include
using namespace std;const int maxn&#61;40;int main()
{bitset b;int n;while(cin>>n){int index&#61;0;while(n){b[index&#43;&#43;]&#61;n%2;n/&#61;2;}unsigned int sum&#61;0;int k&#61;31;for(int i&#61;0;iint)pow(2,k);k--;}cout<return 0;
}