/*
bitset类型:标准库中处理位集的类。
初始化bitset对象的方法,其中n是代表几位位数:
bitset<n> b; b有n位,每一位都是0
bitset<n> b(u); b是unsigned long型u的一个副本
bitset<n> b(s); b是字符串对象s中含有的位串的副本
bitset<n> b(s,pos,n); b是s中从位置pos开始的n个位的副本
在使用unsigned值初始化bitset对象时,将白值转化为二进制值,如果该值的二进制位超过bitset对象的最高位,则超出部分将被丢弃,如果该值的最高位大于bitset对象的最高位,则超出部分将置为0.例如:
(0xffff在32为中unsigned值中表示二进制位就是十六个1和十六个0,使用0xffff初始化bitset对象)
bitset<16> b1(0xffff); //0~15位置为1,0xffff多出部分被抛弃
bitset<32> b2<0xffff); //0~15位置为1,16~31位置为0,刚好保存0xffff的值
bitset<128> b3<0xffff); //0~31为0xffff的二进制位值,超部出分置为0
使用string对象初始化bitset对象:string对象和bitset对象之间是反向转化的:string对象的最右边字符用来初始化bitset的低阶位, 即string对象的下标值最大的那个字符作为bitset对象的下标值最小的位。例如:
string str("1100");
bitset<32> b4(str); //则bitset对象b4为:00110000000..........
bitset对象的操作:
b.any() 判断存在1
b.none() 判断不存在其
b.count() 计算1的个数
b.size() 计算二进制的个数
b[pos] 访问下标为pos的二进制位
b.test(pos) 判断下标为pos的位是否为1
b.set() 把bitset对象全部置为1
b.set(pos) 把pos下标的二进制位置为1
b.reset() 全部置为0
b.reset(pos) 把小表pos的二进制位置为0
b.flip() 全部取反
b.flip(pos) 下标为pos的二进制位取反
b.to_ulong() 把b中同样的二进制位返回一个unsigned long值
os<<b 把b中的位集输出到os流
例:
size_t bits_set=b.cout();
//count操作返回类型是标准库中命名为size_t的类型,size_t类型定义在cstddef头文件中,
//它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小
*/
int main(){
bitset<5> b1(0xffff); //0xffff比bitset位数大,超出部分直接丢弃
cout<<b1<<endl;
//刚刚好存下整个值
bitset<32> b2(0xffff);
cout<<b2<<endl;
//bitset对象位数大于整数值
bitset<128> b3(0xffff);
cout<<b3<<endl;
//使用字符串初始化bitset对象,测试是否是反向转化的。
string strval("1100");
bitset<4> b(strval);
cout<<b<<endl;
cout<<"是否有1"<<b.any()<<endl;// 判断存在1
cout<<"是否有0"<<b.none()<<endl;// 判断不存在其
size_t t=b.count() ;// 计算1的个数,返回size_t类型
cout<<"1的个数是:"<<t<<endl;
size_t t2=b.size() ;// 计算二进制的个数,返回size_t类型
cout<<"二进制的个数:"<<t2<<endl;
int pos=1;
cout<<"下标为1的位"<<b[pos]<<endl; //访问下标为pos的二进制位
cout<<"测试下标为1的位是否为1"<<b.test(pos)<<endl ;// 判断下标为pos的位是否为1
b.set() ;// 把bitset对象全部置为1
cout<<"全部修改为1"<<b<<endl;
b.reset() ;// 全部置为0
cout<<"全部修改为0"<<b<<endl;
b.set(pos) ;// 把pos下标的二进制位置为1
cout<<"下标为1的位修改为1"<<b<<endl;
b.reset(pos);// 把小表pos的二进制位置为0
cout<<"下标为1的为修改为0"<<b<<endl;
b.flip() ;// 全部取反
cout<<"取反"<<b<<endl;
b.flip(pos) ;// 下标为pos的二进制位取反
cout<<"下标为1的位取反"<<b<<endl;
cout<<"unsigned long类型的值"<<b.to_ulong()<<endl;// 把b中同样的二进制位返回一个unsigned long值
return 0;
}
C++学习第八天:bitset类
最新推荐文章于 2024-10-07 21:00:27 发布