1. 为什么与运算能提升代码效率?
那天下午,我正在review同事提交的代码优化方案,原本以为只是常规的性能调优,没想到几行简单的与运算改动,让程序运行速度直接提升了3倍。这种看似简单的位运算技巧,背后其实蕴含着计算机底层运行的深刻原理。
与运算(AND运算)是位运算中最基础的操作之一,它直接作用于二进制数的每一位。在C/C++等语言中,用单个&符号表示。它的运算规则极其简单:只有两个对应位都为1时,结果的该位才为1,否则为0。比如:
code复制 0101 (十进制5)
& 0011 (十进制3)
= 0001 (十进制1)
这种运算之所以能大幅提升效率,核心原因有三:
- 硬件原生支持:CPU有专门的电路处理位运算,通常1个时钟周期就能完成
- 避免分支预测:用位运算替代条件判断可以消除分支预测失败的开销
- 内存访问优化:紧凑的位操作可以减少内存访问次数
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 实战中的四种高效位运算技巧
2.1 奇偶判断的终极优化
传统判断奇数偶数的方法是用取模运算:
c复制if (num % 2 == 0) {
// 偶数
} else {
// 奇数
}
优化后只需要一个与运算:
c复制if ((num & 1) == 0) {
// 偶数
} else {
// 奇数
}
原理:任何数的二进制表示中,最低位为1就是奇数,为0就是偶数。与1做AND运算可以直接获取最低位状态。
实测在x86架构下,这种写法比取模运算快5-7倍。特别是在循环中频繁判断时,性能提升更为明显。
2.2 权限系统的位掩码设计
在权限系统设计中,传统的布尔变量方式需要为每个权限定义单独的变量:
c复制bool canRead;
bool canWrite;
bool canExecute;
用位运算可以压缩到一个整数中:
c复制#define READ 0b001
#define WRITE 0b010
#define EXEC 0b100
// 设置权限
int permissions = READ | WRITE;
// 检查权限
if (permissions & READ) {
// 有读权限
