C语言中,如何高效运用bitset进行位操作?
- 内容介绍
- 文章标签
- 相关推荐
本文共计923个文字,预计阅读时间需要4分钟。
很多人在写代码时,可能会遇到类似的问题。例如,以下代码:
- 想表示十进制 42 的位模式:用
std::bitset(42ULL)—— 注意必须是无符号整型,且位宽不能超unsigned long long范围(通常 64 位) - 想从二进制字符串构造:用
std::bitset("101010"),注意字符串长度不能超模板参数,且只含 '0'/'1' - 初始化全 0:直接
std::bitset b;,默认构造就是零值,不用写= 0
位运算操作符 ≠ 原生整型,不能混用 & 或 |
std::bitset 重载了 &、|、^、~,但它们返回的是新 bitset 对象,不是整数;也不能和 int 直接运算。常见错误是写 b & 0xFF,这会触发隐式转换失败或调用错误重载,编译不过。
本文共计923个文字,预计阅读时间需要4分钟。
很多人在写代码时,可能会遇到类似的问题。例如,以下代码:
- 想表示十进制 42 的位模式:用
std::bitset(42ULL)—— 注意必须是无符号整型,且位宽不能超unsigned long long范围(通常 64 位) - 想从二进制字符串构造:用
std::bitset("101010"),注意字符串长度不能超模板参数,且只含 '0'/'1' - 初始化全 0:直接
std::bitset b;,默认构造就是零值,不用写= 0
位运算操作符 ≠ 原生整型,不能混用 & 或 |
std::bitset 重载了 &、|、^、~,但它们返回的是新 bitset 对象,不是整数;也不能和 int 直接运算。常见错误是写 b & 0xFF,这会触发隐式转换失败或调用错误重载,编译不过。

