bitset是C++中用于处理固定长度二进制位的类模板,定义在头文件中,支持从整数、字符串初始化,默认初始化为0;提供test、set、reset、flip等成员函数进行位操作,count可统计1的个数,any和none判断是否有位为1或全0,to_string和to_ulong实现类型转换;支持按位与、或、异或、移位等运算;常用于状态压缩、集合表示和高效位统计,大小需在编译时确定。

bitset 是 C++ 中用于处理固定长度二进制位的类模板,定义在
1. 创建和初始化 bitset
bitset 的大小在编译时确定,必须指定长度。可以通过多种方式初始化:
- 从整数初始化(转换为二进制)
- 从字符串初始化
- 默认初始化(所有位为 0)
#include#include int main() { std::bitset<8> b1; // 默认初始化,全为 0 std::bitset<8> b2(255); // 从整数初始化:255 -> 11111111 std::bitset<8> b3("11001010"); // 从字符串初始化 std::bitset<8> b4(std::string("0011")); // 也可以用 string std::cout << b1 << "\n"; // 00000000 std::cout << b2 << "\n"; // 11111111 std::cout << b3 << "\n"; // 11001010 }
2. 常用成员函数操作
bitset 提供了丰富的成员函数来访问和修改位。
- test(pos):检查第 pos 位是否为 1(越界会抛异常)
- set(pos):将第 pos 位置为 1
- set(pos, value):将第 pos 位设置为 value(true 或 false)
- reset(pos):将第 pos 位置为 0
- flip():翻转所有位
- flip(pos):翻转第 pos 位
- count():返回值为 1 的位的个数
- size():返回总位数
- any():是否有任意一位为 1
- none():是否所有位都为 0
- to_string():转换为字符串
- to_ulong():转换为 unsigned long
- to_ullong():转换为 unsigned long long
std::bitset<8> b("10101010");
std::cout << b.test(0) << "\n"; // 0
std::cout << b.test(1) << "\n"; // 1
b.set(0); // 设置第0位为1
std::cout << b << "\n"; // 10101011
std::cout << b.count() << "\n"; // 5
std::cout << b.any() << "\n"; // 1 (true)
std::cout << b.none() << "\n"; // 0 (false)
b.flip(); // 全部翻转
std::cout << b << "\n"; // 01010100
std::cout << b.to_string() << "\n"; // "01010100"
std::cout << b.to_ulong() << "\n"; // 84
3. 支持的位运算操作
bitset 支持常见的位运算符,可以像整数一样操作,但更安全且可读性强。
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
立即学习“C++免费学习笔记(深入)”;
- ~b:按位取反
- b1 & b2:按位与
- b1 | b2:按位或
- b1 ^ b2:按位异或
- b :左移 n 位
- b >> n:右移 n 位
std::bitset<8> a("11001100");
std::bitset<8> b("10101010");
std::cout << (a & b) << "\n"; // 10001000
std::cout << (a | b) << "\n"; // 11101110
std::cout << (a ^ b) << "\n"; // 01100110
std::cout << (a << 2) << "\n"; // 00110000
std::cout << (a >> 2) << "\n"; // 00110011
4. 实际应用场景
bitset 常用于以下场景:
- 布尔数组替代:比 vector
更高效 - 状态压缩:如算法题中的状态表示
- 集合操作:每个位代表一个元素是否存在
- 快速位统计:count() 非常高效(底层使用内建函数)
std::bitset<8> s; s.set(0); s.set(2); s.set(5); std::cout << s << "\n"; // 00100101基本上就这些。bitset 使用简单,性能高,是 C++ 中处理位操作的利器。注意它的大小必须在编译期确定,如果需要动态长度,考虑 std::vector









