c++ bitset怎么用 c++位操作容器bitset【实例】

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 支持原生的 &|^~ 运算符,左右操作数类型和长度必须一致:

  • 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 默认打印二进制字符串