bitset类型,使用该类型时需要先包含该头文件并进行声明:
#include <bitset> using namespace std;
一、bitset类型的初始化方式
一共有四种初始化方式:
For Example:
//bitset对象的初始化 //方法一 bitset<32> b; //直接构造一个空对象,其中的每一位都默认为0 //方法二 unsigned long a =32; bitset<32> b1(a); //构造成一个unsigned long类型的二进制副本 //方法三 string a1("10001100001111001"); bitset<17> b2(a1); //构造成一个含有二进制位串的副本 //方法四 bitset<10> b3(a1,1,10);//构造成从a1的1位置开始的10个位的副本
只能以位置的方式来访问其中每一个二进制元素,即以下标的方式来访问,但需注意的是像数组集合一样,该集合的下标也是从0开始的。
//按照下标的位置来访问该二进制集合 for(int i = 0;i<15;i++) { cout<<b2[i]<<flush;//输出:100111100001100 }
cout<<"b:"<<b<<endl;//输出:00000000000000000000000000000000 cout<<"b1:"<<b1<<endl;//输出:00000000000000000000000000100000 cout<<"b2:"<<b2<<endl;//输出:10001100001111001 cout<<"b3:"<<b3<<endl;//输出:0001100001
有两种获取方式:分别是:转换成一个unsigned long的整数类型 (调用成员函数:.to_ulong())
转换成一个包含该集合所有二进制位的字符串 (调用成员函数:.to_string())
string str("0001110001"); bitset<10> bitver(str); //转换成一个unsigned long的整数类型 unsigned long ul = bitver.to_ulong();//输出113 cout<<ul<<endl; //转换成一个包含该集合所有二进制位的字符串 string ss = bitver.to_string();//输出0001110001 cout<<ss<<endl;
.set() //将所有的二进制位都设置为1 .reset() //将所有的二进制位都设置为0 .size() //返回集合的大小 .set[pos] //将pos位置的二进制位设置为1 .reset[pos] //将pos位置的二进制位设置为0 .flip() //将所有的二进制位都取反 .flip(pos) //将pos位置的二进制位取反 //。。。。
但须注意的是:bitset集合按位运算的对象只能是也是一个bitset集合,而不能与一个整数进行按位运算。
For Example:
#include<iostream> #include<bitset> #include<string> #include<vector> using namespace std; int main() { string str("0001110001"); bitset<10> bitver(str); //取反 bitver = ~bitver; cout<<bitver<<endl;//输出1110001110 //左移两位 bitset<10> b1 = bitver<<2; cout<<"b1"<<b1<<endl;//输出1000111000 //右移两位 bitset<10> b2 = bitver>>2; cout<<"b2"<<b2<<endl;//输出0011100011 //按位与& unsigned long a = 1; bitset<10> a1(a); cout<<"a1"<<a1<<endl;//输出0000000001 bitset<10> b3 = bitver & a1; cout<<"b3"<<b3<<endl;//输出0000000000 return 0; }
原文:http://blog.csdn.net/yyc1023/article/details/19756083