C++标准库中bitset类型

虽然在C++的基本类型中,似乎没有二进制这个重要的类型,但是在C++标准库中却提供了能够处理二进制位的有序集合类型,这就是

bitset类型,使用该类型时需要先包含该头文件并进行声明:

  1. #include <bitset>  
  2. using namespace std;  

该类型存储的是一个有序的二进制数据的集合,该集合的长度值需要在构造该类型时在尖括号中给出(因为该类型实际上也是一种类模版)。

一、bitset类型的初始化方式
一共有四种初始化方式:
For Example:

  1. //bitset对象的初始化  
  2.     //方法一  
  3.     bitset<32> b; //直接构造一个空对象,其中的每一位都默认为0  
  4.     //方法二  
  5.     unsigned long a =32;  
  6.     bitset<32> b1(a);  //构造成一个unsigned long类型的二进制副本  
  7.     //方法三  
  8.     string a1("10001100001111001");  
  9.     bitset<17> b2(a1); //构造成一个含有二进制位串的副本  
  10.     //方法四  
  11.     bitset<10> b3(a1,1,10);//构造成从a1的1位置开始的10个位的副本  

二、对于该二进制集合的访问方式

只能以位置的方式来访问其中每一个二进制元素,即以下标的方式来访问,但需注意的是像数组集合一样,该集合的下标也是从0开始的。

  1. //按照下标的位置来访问该二进制集合  
  2. for(int i = 0;i<15;i++)  
  3. {  
  4.     cout<<b2[i]<<flush;//输出:100111100001100  
  5. }  

三、输出二进制位
与一般容器集合不同的是bitset二进制集合可以直接用输出操作符进行正题输出。
  1. cout<<"b:"<<b<<endl;//输出:00000000000000000000000000000000  
  2. cout<<"b1:"<<b1<<endl;//输出:00000000000000000000000000100000  
  3. cout<<"b2:"<<b2<<endl;//输出:10001100001111001  
  4. cout<<"b3:"<<b3<<endl;//输出:0001100001  

四、对于bitset对象的值的获取

有两种获取方式:分别是:转换成一个unsigned long的整数类型  (调用成员函数:.to_ulong())
                        转换成一个包含该集合所有二进制位的字符串    (调用成员函数:.to_string())

  1. string str("0001110001");  
  2. bitset<10> bitver(str);  
  3. //转换成一个unsigned long的整数类型   
  4. unsigned long ul = bitver.to_ulong();//输出113  
  5. cout<<ul<<endl;  
  6. //转换成一个包含该集合所有二进制位的字符串  
  7. string ss = bitver.to_string();//输出0001110001  
  8. cout<<ss<<endl;  

五、利用内置成员函数对真个bitset对象进行设置
  1. .set() //将所有的二进制位都设置为1  
  2. .reset() //将所有的二进制位都设置为0  
  3. .size() //返回集合的大小  
  4. .set[pos] //将pos位置的二进制位设置为1  
  5. .reset[pos]  //将pos位置的二进制位设置为0  
  6. .flip() //将所有的二进制位都取反  
  7. .flip(pos)   //将pos位置的二进制位取反  
  8. //。。。。  

六、bitset集合最重要的特性是此类也支持内置的位操作符

但须注意的是:bitset集合按位运算的对象只能是也是一个bitset集合,而不能与一个整数进行按位运算。
For Example:

  1. #include<iostream>  
  2. #include<bitset>  
  3. #include<string>  
  4. #include<vector>  
  5. using namespace std;  
  6. int main()  
  7. {  
  8.    string str("0001110001");  
  9.    bitset<10> bitver(str);  
  10.    //取反  
  11.    bitver =  ~bitver;  
  12.    cout<<bitver<<endl;//输出1110001110  
  13.    //左移两位  
  14.    bitset<10> b1 = bitver<<2;  
  15.    cout<<"b1"<<b1<<endl;//输出1000111000  
  16.    //右移两位  
  17.    bitset<10> b2 =  bitver>>2;  
  18.    cout<<"b2"<<b2<<endl;//输出0011100011  
  19.    //按位与&  
  20.    unsigned long  a = 1;  
  21.    bitset<10> a1(a);  
  22.    cout<<"a1"<<a1<<endl;//输出0000000001  
  23.    bitset<10> b3 =  bitver & a1;   
  24.    cout<<"b3"<<b3<<endl;//输出0000000000  
  25.    return 0;  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值