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 返回多个值