bitset 详解
一些简单的原子操作,往往能组合出复杂而强大的功能,位操作的深远意义不在于表示一种数值,而是可能的情况数。
基本结构
-
bitset所在的头文件
,其命名空间为std,需要注意的是,bitset在使用时bitset 属于非类型模板参数。 #include <bitset> using namespace std; bitset<8> bs; //模板参数是一个size_t类型的数值(value),而非一个类型。 //numeric_limits<size_t>::min() == 0; //std::bitset<N> 表示一个N位的二进制数对象。 //默认构造函数将其全部初始为0。 //将bitset转换为十进制数 cout << bs.to_ulong() << endl; //将bitset转换为string类型 cout << bs.to_string() << endl;
-
需要注意的是,bitset
模板类虽然重载了中括号运算符,bs[0]表示的是将该数值的最低一位(二进制的末尾元素)设为0,并非第一位。 std::bitset<8> bs; //0000 0000 bs[0] = 1; //0000 0001 bs[7] = 1; //1000 0001
-
默认的无参构造所有位为0。其他的初始化方式如下:
bitset<8> bs(7); bs.to_string(); //0000 0111 bitset<8> bbs(0x07); bbs.to_string(); //0000 0111 bitset<8> bbbs("00000111"); bbbs.to_ulong(); //7
Bitset的操作
成员函数 函数功能 bs.any() 检查是否有位数是1 bs.none() 检查是否所有的位都是0 bs.size() 返回该对象的位数 bs.count() 检查值为1的个数 bs.test(pos) 检测pos位是否为1 bs.set() 所有位置为1 bs.set(pos) pos位置为1 bs.reset() 所有位置为0 bs.reset(pos) pos位置为0 bs.flip() 所有位取反 bs.flip(pos) pos位取反 os « b 逐位输出 一些用法实例
-
十进制数向二进制数转换
string dec2Bin(const &string s) { string res = ""; bitset<s.size()> bs(s); res = s.to_string(bs); return res; }
-
将bitset视作一组标志,具体用法见(https://starkschroedinger.github.io/2019/12/10/LeetCode-Records/)深度优先搜索—36M 有效的数独。
-
最后更新日期:2020-02-15