位运算符直接操作二进制位,效率高,C++提供6种:&(与)、|(或)、^(异或)、~(取反)、(右移),常用于奇偶判断、乘除优化、交换数值、清除或提取特定位,典型应用包括统计1的个数、判断2的幂和找唯一数。

位运算符直接对整数在内存中的二进制位进行操作,效率高,常用于底层编程、状态压缩和算法优化。C++提供了6个基本的位运算符,掌握它们能帮助你写出更高效的代码。
基本位运算符说明
C++中常用的位运算符包括:
- &:按位与,两个对应位都为1时结果为1
- |:按位或,任一对应位为1时结果为1
- ^:按位异或,对应位不同时为1
- ~:按位取反,0变1,1变0
- :左移,将二进制位向左移动指定位置,右边补0
- >>:右移,将二进制位向右移动指定位置,左边补符号位(有符号)或0(无符号)
例如:
int a = 5; // 二进制: 101int b = 3; // 二进制: 011
a & b; // 结果: 1 (001)
a | b; // 结果: 7 (111)
a ^ b; // 结果: 6 (110)
~a; // 结果: -6(补码表示)
常用技巧与应用场景
位运算在实际编程中有许多高效用法:
立即学习“C++免费学习笔记(深入)”;
- 判断奇偶性:x & 1 == 0 表示偶数,否则为奇数
- 快速乘除2的幂:x > n 相当于 x / (2^n)(正数)
- 交换两个数:a ^= b; b ^= a; a ^= b; 可不用临时变量
- 清除最低位的1:x & (x - 1) 常用于统计1的个数
- 提取最低位的1:x & (-x)
-
设置或清除某一位:
- 设置第n位:x |= (1
- 清除第n位:x & ~(1
- 检查第n位是否为1:(x >> n) & 1
典型应用示例
以下是一些常见问题的位运算解法:
-
统计二进制中1的个数:
int count = 0;
while(n) {
n &= n - 1;
count++;
} - 判断是否为2的幂:(n > 0) && ((n & (n - 1)) == 0)
- 只出现一次的数字:数组中其他数都出现两次,找出唯一的那个 —— 使用全部异或,结果即为答案
基本上就这些。位运算看似简单,但灵活使用可以极大提升程序性能,尤其在处理标志位、状态机、哈希计算等场景时非常实用。关键是理解二进制表示和每种操作的本质效果。










