【C++ Primer】【学习笔记】【第三章】标准库类型之:bitset类型

刺骨的言语ヽ痛彻心扉 2022-08-06 05:03 225阅读 0赞

标准库bitset类型

使用bitset需要包含的头文件和对应的声明:

#include

using std::bitset

bitset和vector类似,其不是一种数据类型,而是一个类模板。而与vector不一样的是,bitset类型对象的区别仅在其长度而不在其类型。

1、几种初始化bitset对象的方式如下:






























方式


含义


bitset<n> b;


b有n位,每位都为0。


bitset<n> b(u);


b是unsigned long型u的一个副本。(unsigned long型的位数对应机器位数,32位机器则为32,64位机器则为64。)


bitset
<n> b(s);




b是string对象s中含有的位串的副本。


bitset<n> b(s, pos, n);


b是string对象s中从位置pos开始的n个位的副本。




bitset
<n> b(s, pos);




b是string对象s中从位置pos开始到最后一个位置的副本。


2、 bitset对象的操作


































































操作


含义


b.any()


b中存在置为1的二进制位,则为true


b.none()


b中不存在置为1的二进制位,则为true


b.count()


b中置为1的二进制位的个数,返回类型为size_t(定义在头文件cstddef中,对应c的头文件位stddef.h),size_t是一个与机器相关的unsigned类型。


b.size()


b中二进制位的个数,返回类型为size_t。


b[pos]


访问b中在pos处的二进制位


b.test(pos)


b中在pos处的二进制位为1,则为true


b.set()


把b中所有二进制位都置为1


b.set(pos)


把b中pos处的二进制位置为1。


注:写法b[pos].set()是无法编译通过的,因为bitset类没有对应的函数。


b.reset()



b中所有二进制位都置为0


b.reset(pos)


把b中pos处的二进制位置为0。




注:写法b[pos].reset()是无法编译通过的,因为bitset类没有对应的函数。



b.flip()


把b中所有二进制位逐位取反


b.flip(pos)  or


b[pos].flip()


把b中pos处的二进制位取反




b.to_ulong()


把b中同样的二进制位返回一个unsigned long值。


注:b的二进制位数必须小于等于unsigned long的长度,否则会产生运行时异常。


os << b


把b中的位集输出到os流

【习题3.24】给定一个空的bitset对象,然后将序列1,2,3,5,8,13,21对应的位设置为1。

  1. #include <iostream>
  2. #include <bitset>
  3. using namespace std;
  4. int main()
  5. {
  6. bitset<32> bitvec;
  7. int a = 0, b = 1;
  8. int c = a + b;
  9. while (c <= 21)
  10. {
  11. bitvec.set(c);
  12. a = b;
  13. b = c;
  14. c = a + b;
  15. }
  16. cout << "bitvec: " << bitvec << endl;
  17. return 0;
  18. }

输出:

  1. [chapter3]$ ./a.out
  2. bitvec: 00000000001000000010000100101110

发表评论

表情:
评论列表 (有 0 条评论,225人围观)

还没有评论,来说两句吧...

相关阅读