bitest(位集合)------c++程序设计原理与实践(进阶篇)
发布日期:2022-04-04 06:36:21 浏览次数:18 分类:博客文章

本文共 1279 字,大约阅读时间需要 4 分钟。

  标准库模板类bitset是在<bitset>中定义的,它用于描述和处理二进制位集合。每个bitset的大小是固定的,在创建时指定:

bitset<4> flags;bitset<128> dword_bits;bitset<12345> lots;

  默认情况下,bitset被初始化为全0,但通常我们都会给它一个初始值,可以是一个无符号的整数或者”0“和”1“组成的字符串。例如:

bitset<4> flags=0xb;bitset<128>dword_bits{string{"1010101010101010"}};bitset<12345>lots;

  这两段代码中,lots被初始化为全0,dword_bits的钱112为被初始化为全0,后16位由程序显式指定。如果你给出的初始化字符串中包含0和1之外的符号,bitset会抛出一个std::invalid_argument异常:

string s;cin>>s;bitset<12345> my_bits(s);    //可能抛出std::invalid_argument

  常用的位运算符都可用于bitset。例如,假定b1、b2和b3都是bitset:

b1=b2&b3;    //与b1=b2|b3;    //或b1=b2^b3;    //异或b1=~b2;    //补b1=b2<<2;    //左移b1=b2>>3;    //右移

  大致来说,对于位运算而言,bitset就像unsigned int 一样,只不过其大小任意,由用户指定。你能对unsigned int 做什么(除了算术运算之外),就能对bitset做什么。特别地,bitset对I/O也很有用:

cin>>b;    //从输入读取一个bitsetcout<
<8>('c'); //输出字符'c'的位模式

  当读入bitset时,输入流会寻找0和1,例如,如果输入下面的内容:

10121

  输入流会读入101,21会被留下。

对于字节和字,bitset中的位是由右至左编号的(从最低有效位到最高有效位)。这样,第7位的值就是27

7: 6: 5: 4: 3: 2: 1: 0:
1 0 1 0 0 1 1 1

对于bitset而言,编号顺序不仅仅是遵循惯例的问题,还起到二进制位的索引下标的作用。例如:

#include 
#include
using namespace std;int main(){ int n; const int j = n; constexpr int max = 10; for (bitset
b; cin >> b;) { cout << b << '\n'; for (int i = 0; i < max; ++i)cout << b[i]; cout << '\n'; }}

  

c++程序设计原理与实践(进阶篇)

转载地址:https://www.cnblogs.com/l2017/p/7845966.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:函数形参为基类数组,实参为继承类数组,下存在的问题------c++程序设计原理与实践(进阶篇)
下一篇:有符号数和无符号数------c++程序设计原理与实践(进阶篇)

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月08日 11时19分59秒