C++位运算通过6个运算符直接操作二进制位,提升效率。按位与(&)、或(|)、异或(^)、取反(~)、左移()可用于判断奇偶、快速乘除2的幂、交换变量、清除或获取最低位1。常用于状态压缩、集合操作和加密校验,建议使用无符号类型避免符号问题,掌握原理可优化算法和标志位处理。

在C++中,位运算是直接对整数的二进制位进行操作的方法,效率高,常用于底层开发、算法优化和状态控制。掌握位运算可以提升代码性能,简化某些逻辑判断。
常用的位运算符
C++提供了6个基本的位运算符:
- &:按位与。两个对应位都为1时结果才为1。
- |:按位或。两个对应位有一个为1结果就为1。
- ^:按位异或。两个对应位不同时结果为1。
- ~:按位取反。将每一位0变1、1变0(包括符号位)。
- :左移。将二进制位整体向左移动n位,右边补0。
- >>:右移。将二进制位整体向右移动n位,左边补符号位(算术右移)或0(逻辑右移,取决于类型)。
常见用法与技巧
位运算不仅快,还能实现一些巧妙的功能。
- 判断奇偶性:x & 1 == 0 表示偶数,否则为奇数。
- 快速乘除2的幂:x > n 相当于 x / (2^n)(对正数有效)。
-
交换两个数:使用异或无需额外变量。
a ^= b;
b ^= a;
a ^= b; - 清除最右边的1:x & (x - 1) 可以将x的最低位1清零,常用于统计1的个数。
- 获取最右边的1:x & (-x) 得到只保留最低位1的结果。
实际应用场景
位运算在实际编程中有很多用途。
立即学习“C++免费学习笔记(深入)”;
- 状态压缩:用一个整数表示多个布尔状态。比如用8位char表示8种开关状态,通过 & 和 | 操作开启或关闭某一位。
- 集合操作:用位表示集合元素是否存在,| 表示并集,& 表示交集,^ 表示对称差。
- 加密与校验:异或具有自反性(a ^ b ^ b = a),可用于简单加密或数据校验。
注意事项
使用位运算时要注意数据类型和符号问题。
- 尽量使用无符号类型(如unsigned int)避免右移时符号位扩展带来的意外。
- 左移不要超出类型范围,否则行为未定义。
- 负数的位运算依赖补码表示,可移植性需注意。
基本上就这些。熟练运用位运算能写出更高效、简洁的C++代码,特别是在处理标志位、优化算法时非常有用。多练习常见技巧,理解其背后的二进制原理是关键。











