C++学习第八天:bitset类

来源:互联网 发布:郑州java程序员工资 编辑:程序博客网 时间:2024/04/20 08:14

/*bitset类型:标准库中处理位集的类。初始化bitset对象的方法,其中n是代表几位位数:bitset<n> b;b有n位,每一位都是0bitset<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()判断存在1b.none()判断不存在其b.count()计算1的个数b.size()计算二进制的个数b[pos]访问下标为pos的二进制位b.test(pos)判断下标为pos的位是否为1b.set()把bitset对象全部置为1b.set(pos)把pos下标的二进制位置为1b.reset()全部置为0b.reset(pos)把小表pos的二进制位置为0b.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;//判断存在1cout<<"是否有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的位是否为1b.set();//把bitset对象全部置为1cout<<"全部修改为1"<<b<<endl;b.reset();//全部置为0cout<<"全部修改为0"<<b<<endl;b.set(pos);//把pos下标的二进制位置为1cout<<"下标为1的位修改为1"<<b<<endl;b.reset(pos);//把小表pos的二进制位置为0cout<<"下标为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;}


0 0
原创粉丝点击