bitset是C++编译期定长位容器,支持位运算、下标访问、字符串转换等;声明需常量大小,提供set/reset/flip/count/any等成员函数及&|~等运算符。

bitset 是 C++ 标准库中用于高效处理固定长度二进制位的容器,它不是动态数组,而是在编译期就确定大小的位序列,支持按位运算、位访问、字符串转换等操作,比手动用 int/long 做位运算更安全、清晰。
声明与初始化
bitset 的模板参数必须是编译时常量(如 bitset),不能是变量。常见初始化方式:
-
全零初始化:
bitset bs;→ 全为 0 -
从整数初始化:
bitset bs(42);→ 十进制 42 = 二进制 00101010(高位补零) -
从字符串初始化:
bitset bs("10110");→ 右对齐填充,结果为 00010110 -
从字符数组初始化:
bitset bs(string("1100")); // 或 const char*
常用成员函数与操作
可以直接通过下标访问单个位(从右往左,索引 0 表示最低位),也支持标准位运算符:
-
bs[3]返回第 3 位(bool 类型),可读可写(bs[3] = 1;) -
bs.set()全置 1;bs.reset()全置 0;bs.flip()全取反 -
bs.set(i)置第 i 位为 1;bs.reset(i)置为 0;bs.flip(i)翻转第 i 位 -
bs.count()返回 1 的个数;bs.size()返回总位数(编译期常量) -
bs.any()是否至少有一个 1;bs.none()是否全为 0;bs.all()是否全为 1(C++11 起)
位运算与组合使用
bitset 支持原生的 &、|、^、~ 运算符,左右操作数类型和长度必须一致:
立即学习“C++免费学习笔记(深入)”;
bitset a("10101010"), b("11110000");-
auto c = a & b;→ "10100000" -
auto d = ~a | b;→ 先取反再或 - 也可链式调用:
a.set().flip(0).reset(7);
转换为其他类型
方便调试和交互:
-
bs.to_string()→ 返回std::string,如"00101010" -
bs.to_ulong()→ 转为 unsigned long(若超出范围会抛std::overflow_error) -
bs.to_ullong()→ C++11 起支持 unsigned long long(更安全) - 输出流直接支持:
cout 默认打印二进制字符串









