bitset
是 C++ 标准库中的一个类,用于处理固定大小的二进制位序列。
1. 引入头文件使用 #include <bitset>
。
2. 初始化
- 默认初始化:所有位为
0
std::bitset<8> b1; // 00000000
- 从整数初始化
std::bitset<8> b2(42); // 00101010
- 从字符串初始化
std::bitset<8> b3("101010"); // 00101010
3. 常用操作
- 访问位
b1[0] = 1; // 设置第0位为1 bool bit = b1[0]; // 获取第0位的值
- 设置/重置位
b1.set(); // 所有位设置为1 b1.reset(); // 所有位重置为0 b1.flip(); // 所有位取反 b1.set(pos); // 设置pos位为1 b1.reset(pos); // 设置pos位为0 b1.flip(pos); // 反转pos位
- 统计
int count = b1.count(); // 统计1的个数 int size = b1.size(); // 获取位总数 bool any = b1.any(); // 是否存在1 bool none = b1.none(); // 是否全为0
4. 转换
- 转换为整数
unsigned long val = b1.to_ulong();
- 转换为字符串
std::string s = b1.to_string();
5. 位运算
支持位运算:
std::bitset<8> b4 = b1 & b2; // 与
std::bitset<8> b5 = b1 | b2; // 或
std::bitset<8> b6 = b1 ^ b2; // 异或
std::bitset<8> b7 = ~b1; // 取反
b1 <<= 2; // 左移
b1 >>= 2; // 右移
6. 注意事项
bitset
的大小在编译时确定。- 访问越界会导致未定义行为。
to_ulong()
在bitset
表示的数值超出unsigned long
的范围时会抛出异常。