- 用于位运算的类,定义在头文件bitset中。能够处理超过最长整型类型的位集合。
- 定义和初始化bitset
当定义一个bitset时,需要声明它包含多少个二进制位:
bitset<32> bitvec(1U); //32位;低位为1,其他位为0
bitset<n> b; //b有n位;每一位均为0.此构造函数位constexpr
bitset<n> b(u); //b是unsigned long long值u的低n位的拷贝。如果大于该类型ull的长度,则多出的高位位置0
bitset<n> b(s, pos, m, zero, one); //b是string s从pos开始m个字符的拷贝
bitset<13> bitvec1(0xbeef); //bitvec1默认为13位,高位丢弃;1111011101111
bitset<20> bitvec2(0xbeef); //bitvec2默认位2-位,高位置0;00001011111011101111
//在64位机器中,long long 0ULL是一个64位的0比特,因此~0ULL是64个1
bitset<128> bitvec3(~0ULL); //0~63位为1;63~127位为0
- 当使用string字符串来初始化bitset时,可以使用string的字串进行初始化。同时使用string字符串时,下标编号于bitset相反,string中最大的字符(最右)初始化bitset的低位(下标为0的二进制位)。
string str("111111110000000110101");
bitset<32> bitvec5(str, 5, 4);
bitset<32> bitvec6(str, str.size() - 4); //使用最后4位
- bitset的一些操作
b.any() b中是否有元素
b.all() b中是否满了
b.none() b是否为空
b.count() b中置位的个数
b.size() 一个constexpr函数,返回b中的位数
b.test(pos) 若pos的位置是有元素的,返回true,否则返回false
b.set(pos, v) 设置pos位置为v,v默认为true。
b.set() 如果不传参数,则设置所有位
b.reset(pos) 将pos处的位复位
b.reset() 将b所有位复位
b.flip(pos) 改变位置pos处的状态
b.flip() 改变b中的每一位状态
b[pos] 访问b中pos处的位置
b.to_ulong() 返回一个unsigned long或unsigned long long值,
b.to_ullong() 如果b中位模式不能放入指定的结果类型,则抛出一个overflow_error异常
b.to_string(zero, one) 返回一个string,表示b中的位模式。
os << b 将b中二进制位打印为字符0或1,打印到流os
is >> b 从is中读取字符存入b。当下一个字符不是0或1,或者已经读入了b.size()个时,读取停止。