目录
1、简介
标准库定义了bitset类(定义在头文件bitset中),使位运算的使用更加的容易,并且能够处理超过最长整形类型大小的位集合。
2、bitset初始化
bitset初始化的方法如下表所示。
bitset<n> b; | b大小为n位。每一位均为0。 注:此构造函数是一个constexpr。 |
bitset<n> b(u); | b是unsigned long long值u的低n位的拷贝。超出范围的高位被置为0。 注:此构造函数是一个constexpr。 |
bitset<n> b(s,pos,m,zero,one) | b是string s从位置pos开始m个字符的拷贝。s只能包含字符zero和one,否则抛出invaild_argument异常。pos默认为0,m默认为string::npos,zero默认为‘0’,one默认为‘1’。 |
bitset<n> b(cp,pos,m,zero,one) | 与上个构造函数相同,但从cp指向的字符数组中拷贝字符。如果提供了m,则cp必须指向一个C风格字符串,且从cp开始必须至少有m个zero或one字符。 |
注:当使用一个整形值来初始化bitset时,此值被转换为unsigned long long类型并当做位模式来处理。
3、bitset的操作
bitset的操作如下表所示。
b.any() | b中是否存在置位的位 |
b.all() | b中是否所有位都置位 |
b.none() | b中不存在置位 |
b.count() | b中置位的位数 |
b.size() | b的大小,一个constexpr函数 |
b.test(pos) | 若pos位置位,返回true,否则返回false。 |
b.set(pos,v) | 将pos位置位bool值v(v默认为true)。 |
b.set() | 将b所有位置位。 |
b.reset(pos) | 将pos位复位 |
b.reset() | 将b所有位复位。 |
b.flip(pos) | 改变pos位的位的状态 |
b.flip() | 改变b每一位的状态 |
b[pos] | b的下标操作 |
b.to_ulong() | 返回unsigned long值,其位模式与b相同。如果b的值不能放入给定的类型,则抛出一个overflow_error异常 |
b.to_ullong() | 返回unsigned long long值,其位模式与b相同。如果b的值不能放入给定的类型,则抛出一个overflow_error异常 |
b.to_string(zero,one) | 返回一个string,表示b中的位模式(zero和one的默认值分别为0和1,用来表示b中的0和1)。 |
os << b | 将b中二进制位打印为字符1或0,打印到流os |
is >> b | 从is读取字符存入b,当下一个字符不是1或0时,或是已经读入b.size()个位时,读取过程停止 |