bitset类功能记录

来源:互联网 发布:h5微社区源码 编辑:程序博客网 时间:2024/06/06 05:56

一、bitset的定义

类似于vector后面<>中的数据类型,bitset<>括号中记录了长度。

#include <iostream>#include<bitset>#include<string>using namespace std;int main(){//1    bitset<32> i; //初始化一个32位全部为0的数(注意<>内长度必须为1.整形常量 2.已用常量初始化的const对象 )    //i中的位序是从0到31开始//2    unsigned long i;    bitset<32> j(i)//用i初始化j//3    string s;    bitset<32> k(s);//k是string对象s中含有的位串的副本//4    bitset<32> m(s,pos,n);//m是从位置pos开始的n个位的副本}

二、bitset的初始化

1、用unsigned值初始化
规则:
如果bitset类型长度大于unsigned long值的二进制位数,则其余的高阶位置为0;
如果bitet类型长度小于unsigned long值的二进制位数,则只使用unsigned值中的低阶位,超过bitet类型长度的高阶位将被丢弃。

//例子0xffff在32位机上为 1111 1111 1111 1111 0000 0000 0000 0000bitset<16> a(0xffff); //a为16位全为1,超出部分的0丢弃bitset<32> b(0xffff);//b的0到15位全是1,剩下16到31是0,bitset位数32与unsigned long 长度相同bitset<64> c(0xffff);//bitset为64位大于unsigned long 32, 31到63自动置零

2、用string初始化bitset
规则
从string对象读入位集的顺序是从右向左

string str("1101");bitset<32> a(str); //a中顺序为1011000..00,超出的位全补零string s("111111100000111101010111");bitset<32> b(s,5,4); //从s[5]开始读4位,为1100bitset<32> c(s,s.size()-4); //读后四位(从s[s.size()-4]一直读到结束

三、bitset的操作

bitset<32> a("10010010");a.any();//a中是否有1,返回bool变量,有1为true,全为0返回falsea.none();//a中是否没1,true为全0,false为至少有一个1a.count();//返回a中1的个数a.size();//返回二进制位数int k=a[i];//访问a中i处的位a.set();//将a全置1;a.set(i);//将a中第i位置1;a.reset();//将a全置0;a.reset(i);//将a中第i位置0;a.flip();//全位取反a.flip(i);//i位取反a.to_ulong();//返回a中二进制数的unsigned long数os<<a;//将a输出到os流

附录:

一个例子

#include <iostream>#include<string>#include<stdexcept>#include<bitset>using namespace std;int main(){    bitset<100> a;    a.set();    //a.to_ulong(); //在try前的错误操作不会抛出异常    try{        a.to_ulong(); //导致溢出的操作    }    catch (exception err){      //处理操作        cout << err.what() << ": 溢出" << endl;    }    //a.to_ulong();//try后的错误操作会抛出异常    unsigned long k=a.to_ulong();}
原创粉丝点击