bitset类功能记录

一、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 0000
bitset<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位,为1100
bitset<32> c(s,s.size()-4); //读后四位(从s[s.size()-4]一直读到结束

三、bitset的操作

bitset<32> a("10010010");
a.any();//a中是否有1,返回bool变量,有1为true,全为0返回false
a.none();//a中是否没1,true为全0,false为至少有一个1
a.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();

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章