位运算通过操作二进制位提升效率,C++提供6种运算符:&(与)、|(或)、^(异或)、~(取反)、(右移),用于整型数据。按位与可判断奇偶,或用于设置标志位,异或实现变量交换和找唯一数,左移右移等价乘除2的幂,常用于状态压缩、去重和算法优化。

在C++中,位运算是直接对整数的二进制位进行操作的技术,常用于提升程序效率、节省内存或实现底层控制。掌握这些运算符有助于编写高性能代码,尤其是在算法竞赛、嵌入式开发和系统编程中。
1. C++中的按位运算符种类
C++提供了6个基本的按位运算符:
- &:按位与(AND)
- |:按位或(OR)
- ^:按位异或(XOR)
- ~:按位取反(NOT)
- :左移
- >>:右移
这些运算符只能用于整型数据(如 int、char、short 等),不能用于浮点数或指针类型。
2. 按位与(&)、或(|)、异或(^)的使用
这些运算符对两个操作数的每一位进行逻辑运算。
立即学习“C++免费学习笔记(深入)”;
- a & b:同为1时结果为1
- a | b:任一为1时结果为1
- a ^ b:不同为1,相同为0
示例:
int a = 5; // 二进制: 101int b = 3; // 二进制: 011
int c = a & b; // 结果: 001 → 1
int d = a | b; // 结果: 111 → 7
int e = a ^ b; // 结果: 110 → 6
常见用途:
- 用 & 判断某位是否为1(比如判断奇偶:
n & 1) - 用 | 设置某个位为1(比如设置标志位)
- 用 ^ 实现无需临时变量的交换:
a ^= b; b ^= a; a ^= b;
3. 按位取反(~)和移位运算符
~ 是单目运算符,将操作数的每一位取反。
int a = 5; // 二进制: ...00000101int b = ~a; // 结果: ...11111010(补码表示,实际为 -6)
和 >> 分别将二进制位向左或向右移动。
- a :左移n位,相当于乘以 2^n(不溢出时)
- a >> n:右移n位,相当于除以 2^n(向下取整)
示例:
int x = 4; // 100int y = x int z = x >> 1; // 010 → 2
注意:右移负数时为“算术右移”,符号位保持不变。
4. 实际应用场景举例
位运算在实际编程中有多种高效用途:
-
快速乘除:用
和>>替代乘除2的幂 - 状态压缩:用一个整数表示多个布尔状态(如用 int 表示8个开关)
- 去重/标记:用异或统计出现奇数次的数(如数组中只有一个数出现一次,其余成对出现)
- 优化哈希或集合操作:在算法题中常结合位掩码使用
例如:找出数组中唯一不重复的数
int result = 0;for (int num : nums) {
result ^= num;
}
// 最终 result 就是那个唯一的数
基本上就这些。位运算看似低级,但在合适场景下非常强大。理解其原理并多加练习,能显著提升代码效率和思维灵活性。











