C++ STL bitset的用法

1.声明和初始化
std::bitset是STL的一个模板类,模板参数不是类型,而是整型数值,可以像数组一样使用位。

#include<bitset>
std::bitset<8>bs;    //声明了以bitset对象bs,bs可以装入8个bit,每一位都初始化为0
bs[0] = 1;    //把第0位置1
bs[1] = 0;    //把第1位置0
bs[2] = true;    //把第2位置1(true转换为1)
bs[3] = false;    //把第2位置0(false转换为0)

2.输入/输出

cout << bs << endl;    //输出00000101
cin >> bs;            //输入01010110,如果输入的不是字符0或1,只取该字符前面的二进制位
cout << bs << endl;   //输出01010110

3.bitset与无符号长整型的转换(还可以和unsigned long long int转换,这里不举例了)

unsigned long int value = 23244;
bitset<32>bs(value);    //无符号长整型可以用于初始化bs,若整型数值的位数超过bs的位数,只取低位部分
bitset<8>bs8(value);
unsigned long int new_value = bs.to_ulong();    //bitset可以转换为无符号长整型

cout << "value=" << hex << value << endl;
cout << "bs=" << bs << endl;
cout << "bs8=" << bs8 << endl;
cout << "new_value=" << hex << new_value << endl;

4.bitset与字符串的转换

string str = "011001011101";
//也可以用字符串常量代替str
bitset<8>bs1(str);  //字符串长度大于bs,只取字符串左边
bitset<16>bs2(str); //字符串长度小于bs,高位补零
bitset<8>bs3(str, 4);       //从str中第4个位置开始复制
bitset<8>bs4(str, 3, 6);    //从str中第3个位置开始复制6个位,高位剩余位补零
string str1 = bs1.to_string();
string str2 = bs2.to_string();
string str3 = bs3.to_string();
string str4 = bs4.to_string();

cout << "str=" << str << endl;
cout << "bs1=" << bs1 << endl;
cout << "bs2=" << bs2 << endl;
cout << "bs3=" << bs3 << endl;
cout << "bs4=" << bs4 << endl;
cout << "str1=" << str1 << endl;
cout << "str2=" << str2 << endl;
cout << "str3=" << str3 << endl;
cout << "str4=" << str4 << endl;


5.bitset的其他方法

bitset<16>bs("011001011101");
cout << "bs=" << bs << endl;
cout << "bs中是否存在1? " << bs.any() << endl;       //any()方法判断是否存在置为1的二进制位
cout << "bs中是否不存在1? " << bs.none() << endl;     //none()方法判断是否不存在置为1的二进制位,即全为0
cout << "bs的总位数" << bs.size() << endl;          //size()方法计算二进制位数
cout << "bs中1的总位数:" << bs.count() << endl;    //count()方法计算二进制中1的位数
cout << "bs第四位是否为1? " << bs.test(4) << endl;    //test(size_t pos)方法判断pos位是否为1
cout << "按位取反后bs=" << bs.flip() << endl;        //flip()方法将bitset按位取反
cout << "bs第3位取反后bs=" << bs.flip(3) << endl;  //flip(size_t pos)将bitset的pos位取反
cout << "bs全置1后bs=" << bs.set() << endl;        //set()方法将bs全置1
cout << "bs全置0后bs=" << bs.reset() << endl;      //reset()方法将bs全置0
cout << "bs第5位置1后bs=" << bs.set(5) << endl;     //set(size_t pos)将bs的第pos位置1
cout << "bs第5位置0后bs=" << bs.reset(5) << endl;   //reset(size_t pos)将bs的第pos位置0

6.bs重载的操作符:
[]  ==  !=  <<   >>   <<=   >>=   &=   |=   ^=   ~

猜你喜欢

转载自blog.csdn.net/Lee_01/article/details/83317568
今日推荐