C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset类型

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset类型相关的知识,希望对你有一定的参考价值。

1. 定义

bitset类是一个类模板,类似array类,用来处理二进制位的有序集。

  • 元素类型是固定的,是一个二进制位
  • 尖括号中输入的是bitset的长度而不是元素类型,大小必须是一个常量表达式
  • 编号从0开始的二进制位被称为低位,编号到31结束的二进制位被称为高位
bitset<32> bitvec(1U);   //32位;低位为1,其他位为0

1.1 bitset初始化

操作解释
bitset b;b有n位;每一位均是0.此构造函数是一个constexpr。
bitset b(u);b是unsigned long long值u的低n位的拷贝。如果n大于unsigned long long的大小,则b中超出unsigned long long的高位被置为0。此构造函数是一个constexpr。
bitset b(s, pos, m, zero, one);b是string s从位置pos开始m个字符的拷贝。s只能包含字符zero或one:如果s包含任何其他字符,构造函数会抛出invalid_argument异常。字符在b中分别保存为zero和one。pos默认为0,m默认为string::npos,zero默认为’0’,one默认为’1’。
bitset b(cp, pos, m, zero, one);和上一个构造函数相同,但从cp指向的字符数组中拷贝字符。如果未提供m,则cp必须指向一个C风格字符串。如果提供了m,则从cp开始必须至少有m个zero或one字符。

eg.

bitset<13> bitvec1(0xbeef);
bitset<32> bitvec4("1100");

接受一个string或一个字符指针的构造函数是explicit。

1.2 bitset操作

操作解释
b.any()b中是否存在1。
b.all()b中都是1。
b.none()b中是否没有1。
b.count()b中1的个数。
b.size()长度
b.test(pos)pos下标是否是1
b.set(pos)pos置1
b.set()所有都置1
b.reset(pos)将位置pos处的位复位
b.reset()将b中所有位复位
b.flip(pos)将位置pos处的位取反
b.flip()将b中所有位取反
b[pos]访问b中位置pos处的位;如果b是const的,则当该位置位时,返回true;否则返回false。
b.to_ulong()返回一个unsigned long值,其位模式和b相同。如果b中位模式不能放入指定的结果类型,则抛出一个overflow_error异常。
b.to_ullong()类似上面,返回一个unsigned long long值。
b.to_string(zero, one)返回一个string,表示b中位模式。zero和one默认为0和1。
os << b将b中二进制位打印为字符1或0,打印到流os。
is >> b从is读取字符存入b。当下一个字符不是1或0时,或是已经读入b.size()个位时,读取过程停止。

以上是关于C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset类型的主要内容,如果未能解决你的问题,请参考以下文章

C++ Primer 5th笔记(chap 17 标准库特殊设施)输出补白

C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset类型

C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式

C++ Primer 5th笔记(chap 17 标准库特殊设施)tuple 返回多个值

C++ Primer 5th笔记(chap 17 标准库特殊设施)控制输入格式

C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset操作