一 标准库bitset类型
标准库提供bitset类来进行位集的处理,同其他的一些标准库一样,要使用bitset类就必须包含系相关头文件
#include<bitset>
using std::bitset;
二 bitset对象的定义和初始化
bitset<n> b;//b有n位,每位都为0
bitset<n> b(u);//b是一个unsigned long型的一个副本
bitset<n> b(s);//b是string对象s中含有位串的副本
bitset<n> b(s,pos,n);//b是s中从位置pos开始的n个位的副本
注:1. bitset类型长度大于unsigned long值的二进制位数,高位为0。若beiset类型长度小于unsigned long,则高位丢弃
2.从string对象的读入位集的顺序是从右往左
eg. string str(“1100”);
bitset<32> b(str); //b中2位和3位为1
3.不一定要把整个string对象都作为bitset对象的初始值,相反,可以只用子串作为初始值
string str("111001100110011");
bitset<32> b1(str,5,4);//b1从3位到0位为1100,其余位为0
bitset<32> b2(str,str.size()-4);//使用最后的4的字符
二 bitset对象操作
b.any();//b中是否存在为1的位
b.none();//b中没有一个为1的位,返回true
b.count();//统计b中为1的个数
b.size();//b中二进制的位数
b[pos];//访问b中pos处二进制位
b.test(pos);//测试pos的位是否为1
b.set();//所有二进制设置为1
b.set(pos);//pos位置设置为1
b.reset();//b中所有为为0
b.reset(pos);//pos位设置为0
b.flip();//b中所有的位逐位取反
b.flip(pos);//pos位取反
b.to_ulong();//用b中同样的二进制位返回一个unsigned long值
os<<b;//把b中位集输出到os流
注:count和size操作的返回类型是标准库中命名为size_t的类型。size_t定义在cstddef头文件中