初始化
string str1 = "abc tftf";
//初始化
bitset<20> b1;
bitset<20> b2(0xaa);
bitset<20> b3(str1, 4, 4, 'f', 't'); //(字符串, 起始位置, 数量, 代表0的字符, 代表1的字符)
cout << b1 << endl; //00000000000000000000
cout << b2 << endl; //00000000000010101010
cout << b3 << endl; //00000000000000001010
特别说明:第三个初始化,若给定的字符串范围中含有zero,one之外的字符,系统报异常。
try
{
bitset<20> b4(str1, 3, 4, 'f', 't');
}
catch (exception& e)
{
cout << e.what() << endl; //invalid bitset<N> char
}
其他功能
输入输出
bitset<20> b;
cin >> b; //10101,测试输入值
cout << b << endl; //00000000000000010101
关于二进制位的置位情况
bool a1 = b.any(); //true,有任意一个二进制位置位
bool a2 = b.all(); //false,所有二进制位置位
bool a3 = b.none(); //false,没有二进制位置位
size_t s4 = b.count(); //3,置位的二进制位个数
长度
size_t s5 = b.size(); //20,二进制位的长度
随机访问
bool s6 = b.test(1); //false,索引为1的二进制位的值
bool s7 = b[1]; //false,索引为1的二进制位的值
bool s8 = b[0]; //true,索引为0的二进制位的值
置位操作
bitset<20> s9 = b.set(1); //00000000000000010111,置位索引为1的二进制位
bitset<20> s10 = b.set(); //11111111111111111111,置位所有二进制位
复位操作
bitset<20> s11 = b.reset(1); //11111111111111111101,复位索引为1的二进制位
bitset<20> s12 = b.reset(); //00000000000000000000,复位所有二进制位
取反操作
bitset<20> s13 = b.flip(1); //00000000000000000010,取反索引为1的二进制位
bitset<20> s14 = b.flip(); //11111111111111111101,取反所有二进制位
转换为整形
unsigned long s15 = b.to_ulong(); //1048573,若s15容不下最终转换的值,系统报异常overflow_error
unsigned long long s16 = b.to_ullong(); //1048573
转换为字符串
string s17 = b.to_string('0', '1'); //"11111111111111111101",(代表0的字符,代表1的字符)
具体内容请看C++Primer第17章 17.2 部分
下载C++Primer第五版