标准库定义了 bitset 类,使得位运算的使用更为容易,并且能够处理超过最长整形类型大小的集合。 bitset 类定义在头文件 bitset中。
它也是一个类模板,定义它的时候,需要声明它包含多少个二进制位:
bitset<32> bitu(99);
它的大小必须是一个常量表达式,定义的这个是有从0到31共32个二进制位,编号 从0开始的进制位为低位,到结束的二进制位称为高位。
bitset中的二进制位将是此模式的一个副本。如果bitset的大小大于一个 unsigned long long中的二进制位数,剩余的高位被置为0,如果小于超过bitset大小的高位被丢弃:
bitset操作:
count ,size,all,any和none等几个操作都不接受参数,它们返回bitset的状态。
当我们使用一个整形值来初始化 bitset 时,这个值将会被转换为 unsigned long long 类型并被当作位模式来处理。
可以用一个string初始化 bitset:
string的下标编号习惯与 bitset 恰好相反:string 中下标最大的字符(最右字符)用来初始化bitset中的低位。当用一个string初始化一个bitset时要记住这个差别。
bitset <32> iu("1100"); //输出00000000000000000000000000001100
提取 bitset 的值
to_ulong 和 to_ullong 操作都返回一个值,保存了与bitset相同的位模式。当然只有当bitset在大小小于等于对应的大小(to_ulong 为 unsigned long , to_ullong 为 unsigned long long )时才能使用。
如果 bitset 中的值不能放入给定类型中,则这两个操作会招聘一个 overflow_error 异常。
可以从键盘读取:
bitset<16> biu;
cin >> biu;//从cin读取最多16个0或1 , 若输入其他数字就会输出全0