C++ Primer第五版笔记——bitset类型

本文详细介绍了标准库中的bitset类,包括其定义、初始化方法以及如何进行位运算操作。bitset类能够处理超过最长整型类型的位集合,支持从unsigned值或string初始化,并提供了多种位操作方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标准库定义了bitset类,使得位运算的使用更为容易,并且能够处理超过最长整型类型大小的位集合,其定义在头文件bitset中。
定义和初始化
bitset是一个类模板,类似于array类,具有固定的大小,当定义一个bitset时,需要声明它包含多少个二进制位:

bitset<32> bt(1U);      //32位;低位为1,其他位为0

bitset中的二进制位也是不命名的,通过位置来访问,二进制位的编号是从0开始的。
这里写图片描述

使用unsigned值初始化bitset
当使用一个整型值来初始化bitset时,此值将被转换为unsigned long long类型并被当作位模式来处理。bitset中的二进制位将是此模式的一个副本。如果bitset的大小大于给定的值的二进制位数,则多出的高位将被置为0,如果bitset的大小小于给定的值的二进制位数,则超出bitset大小的部分将被舍弃:

//bitset大小小于给定初始化值的位数,舍弃高位
bitset<13> bt(0xbeef);      //二进制序列为1111011101111
//bitset大小大于给定初始化值的位数,补0
bitset<20> bt(0xbeef);      //二进制序列为0000101111011101111

从string初始化bitset
可以从一个string或是一个字符数组指针来初始化一个bitset,两种情况下,字符都直接表示位模式,当使用字符串表示数时,字符串中下标最小的字符对应高位,反之亦然:

//string的下标编号习惯与bitset恰好相反:
//下标大的初始化低位,下标小的初始化高位
bitset<32> bt("1100");  //2、3两位为1,剩下的两位为0

//不必使用整个string来初始化bitset
string str("111111111111000000010101010");
bitset<32> bt(str,5,4);         //从str[5]开始的4个字符,1111
bitset<32> bt(str,str.size() - 4);  //使用最后4个字符

如果string包含的字符数比bitset少,则bitset的高位置0.


bitset操作
这里写图片描述

bitset的IO运算符
输入运算符从一个输入流读取字符,保存到一个临时的string对象中。直到读取的字符数达到对应的bitset的大小时,或是遇到不是1或0的字符时,或是遇到文件尾或输入错误时,读取过程才会停止。随即用临时的string来初始化bitset。如果读取的字符数小于bitset的大小,则与往常一样,高位将被置0:

bitset<16> bt;
cin>>bt;            //从cin最多读取16个字符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值