bitset
bitset是STL提供的用于记录01串的容器,也就是bitset的每个元素只能为0/1
bitset主要是用于存储二进制位,在需要大量二进制计算的项目中,直接使用bitset比利用数组或者其它方式要更为方便,位运算在存储状态、模拟行动、搜索很多方面有非常巨大的优势。
头文件
1 |
构造函数
1 | bitset<16> first; //构造一个16位的bitset对象,初始值默认为0 |
注意bitset声明后长度不可改变,和数组一样,bitset从0开始编号
如果bitset空间比二进制位数大,则在高位补0,(虽然上面输出是左边为0,但左边是高位,也即其索引分别是15~0)
- 在将整形常量转换为二进制过后,如果bitset位数不够,则自动放弃原数值高位的二进制位。
bitset的操作
以下是bitset常用操作:
1 | a.size() // a的位数 |
或者也可以对bitset使用位操作(返回一个bitset):
1 | a|b |
bitset的原理
bitset的原理与高精度压位类似即:
将一个很长的01串按64位一组划分每组01串用一个64位无符号整数记录
bitset所有的操作都是基于对整数的位操作实现的。
所以bitset的效率非常高,可以看作O(N/64)
bitset应用
可以方便利用bitset实现十进制到二进制的互相转换。
二进制转成十进制
1 |
|
十进制转成二进制
1 |
|
v1.5.2