C++的bitset
bitset 的定义和初始化:
1、bitset<size> b; //b 有 size 位,每位都是默认值 0
2、bitset<size> b(num); //b 是 unsigned long 型 num 的一个副本
3、bitset<size> b(str); //b 是 string 对象 str 中的位串副本,即 01 字符串
4、bitset<size> b(str, pos); //b 是 str 从位置 pos 开始的位串的副本 (从左往右)
5、bitset<size> b(str, pos, n); //b 是 str 中从位置 pos 开始,向后 n 位的副本
注:位是用来保存一组项或条件的yes/no信息的简洁方法,标准库提供了bitset类使得处理位集合更加方便
bitset 的几个注意点:
1、bitset 最右边为下标开始,而 string 最左边!!!
2、bitset 支持位运算
3、可以通过下标来访问
4、包括函数:all(), any(), none(), test(), set([], []), reset([]), flip([]), size(), count(), to_string(zero, one), to_ullong(), to_ulong()
#include <iostream> #include <string> #include <bitset> using namespace std; int main() { // bs 为 unsigned long 137 的低 16 位拷贝 // to_ullong or to_ulong 返回相应的值 bitset<16> bs(137); cout<<bs.to_ullong()<<" 的低 16 位拷贝为:"<<bs<<endl; // str 的值只能为 0 或 1 string str = "10101101"; bitset<16> bs_t(str); cout<<"二进制码 "<<str<<" 对应的值为:"<<bs_t.to_ulong()<<endl; // 从下标为 1 到字符串末尾的拷贝 bitset<16> bs_m(str, 1, str.size()); cout<<"除去二进制码 "<<str<<" 的最高一位后相应的 bitset:"<<bs_m<<endl; // bitset 支持 IO 流, 下面最多输入 16 个 0 或 1 bitset<16> bs_n; cout<<"请输入不超过 16 个 0 或 1:"; cin>>bs_n; cout<<"输入的二进制码的低 16 位为:"<<bs_n<<endl; // to_string(zero, one) 默认 zero 为 '0',one为 '1' cout<<"输出二进制码的字符串形式:"<<bs_n.to_string('*', '#')<<endl; cout<<"输入的二进制码是否有置位了的:"<<boolalpha<<bs_n.any()<<endl; cout<<"输入的二进制码是否全部置位了:"<<bs_n.all()<<endl; cout<<"输入的二进制码是否全部没有置位:"<<bs_n.none()<<endl;
// test(index) 会检查下标越界,而 [] 则不检查 cout<<"二进制码的第一位是否被置位了:"<<bs_n.test(0)<<noboolalpha<<endl; // count() 和 size() 的返回类型为 size_t cout<<"输入的二进制码有 "<<bs_n.count()<<" 个被置位了"<<endl; cout<<"输入的二进制码大小为:"<<bs_n.size()<<endl; // 通过 set(index, flag), reset(index), flip(index) 可实现更详细的操作 cout<<"置位全部二进制码:"<<bs.set()<<endl; cout<<"复位全部二进制码:"<<bs_n.reset()<<endl; cout<<"改变全部二进制码:"<<bs_n.flip()<<endl; system("pause"); return 0; }

浙公网安备 33010602011771号