Bitset
bitset
存储二进制数位,其元素值只可能是 0
或 1
或 true
或 false
。bitset
与 bool
类型的数组类似,但是对空间做了优化。bitset
中的一个元素一般只占 1 bit,相比之下,在大多数语言系统中,最小的元素类型 char
需要 8bit。bitset
需要在编译时就确定其大小。如果需要不定长的 bitset
,需要使用 vector<bool>
。
简单使用¶
// 从字符串初始化
bitset<8> bs1(string("1001"));
// 从字符串初始化,自定义 0/1 字符
string alpha_bit_string = "aBaaBBaB";
bitset<8> b6(alpha_bit_string, 0, alpha_bit_string.size(), 'a', 'B'); // [0,1,0,0,1,1,0,1]
// 从字符串的指定位置和长度初始化
string bit_string = "110010";
bitset<8> b5(bit_string, 2, 3); // [0,0,0,0,0,0,0,1]
// 从数字初始化
bitset<16> bs2(0xD9A1);
bitset<4> bs2(0x1101);
// 可以把 bitset 当作一个整型,可以进行与(&)、或(|)、异或(^)、左移(<<)、右移(>>)、按位取反(~)等操作
bitset<4> foo (string("1001"));
bitset<4> bar (string("0011"));
cout << (foo^=bar) << endl; // 1010 (XOR,assign)
cout << (foo&=bar) << endl; // 0010 (AND,assign)
cout << (foo|=bar) << endl; // 0011 (OR,assign)
cout << (foo<<=2) << endl; // 1100 (SHL,assign)
cout << (foo>>=1) << endl; // 0110 (SHR,assign)
cout << (~bar) << endl; // 1100 (NOT)
cout << (bar<<1) << endl; // 0110 (SHL)
cout << (bar>>1) << endl; // 0001 (SHR)
cout << (foo==bar) << endl; // false (0110==0011)
cout << (foo!=bar) << endl; // true (0110!=0011)
cout << (foo&bar) << endl; // 0010
cout << (foo|bar) << endl; // 0111
cout << (foo^bar) << endl; // 0101
常用的容器方法¶
foo.size()
返回位数foo.count()
返回 1 的个数foo.any()
返回是否有 1foo.none()
返回是否没有 1foo.set()
全都变成 1foo.set(p)
将第 p + 1 位变成 1foo.set(p, x)
将第 p + 1 位变成 xfoo.reset()
全都变成0foo.reset(p)
将第 p + 1 位变成 0foo.flip()
全都取反foo.flip(p)
将第 p + 1 位取反foo.to_ulong()
返回它转换为 unsigned long 的结果,如果超出范围则报错foo.to_ullong()
返回它转换为 unsigned long long 的结果,如果超出范围则报错foo.to_string()
返回它转换为 string 的结果