1. 项目概述
前几天在代码评审时,我发现同事用几个简单的位运算操作,就让原本运行缓慢的排序算法性能提升了近40%。这让我意识到,很多开发者(包括我自己)在日常编码中常常忽略了位运算这个性能优化的利器。
位运算,特别是与运算(AND),是计算机最底层的操作之一。它直接操作内存中的二进制位,不需要额外的函数调用开销,执行速度极快。在合适的场景下使用位运算,往往能带来意想不到的性能提升。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 位运算基础回顾
2.1 常见位运算符
在深入案例之前,我们先快速回顾下位运算的基础知识。位运算主要包括以下几种操作:
- 与运算(&):两个位都为1时结果才为1
- 或运算(|):任意一个位为1结果就为1
- 异或运算(^):两个位不同时结果为1
- 非运算(~):对每一位取反
- 左移(<<):所有位向左移动,低位补0
- 右移(>>):所有位向右移动,高位补符号位
2.2 与运算的特性
与运算有几个特别有用的特性:
- 清零特性:任何数与0做与运算结果都是0
- 保留特性:任何数与1做与运算保留原值
- 判断奇偶:n & 1 结果为1则是奇数,0则是偶数
- 取指定位:通过与特定掩码做与运算可以提取特定位
这些特性使得与运算在权限控制、状态标记、数据压缩等场景特别有用。
3. 实际优化案例分析
3.1 案例一:快速判断奇偶
原始代码:
java复制public boolean isOdd(int num) {
return num % 2 == 1;
}
优化后代码:
java复制public boolean isOdd(int num) {
return (num & 1) == 1;
}
优化原理:
- 取模运算需要除法操作,而除法是CPU中最耗时的基本运算之一
- 与运算直接检查最低位,省去了除法开销
- 实测在热点循环中可提升20-30%性能
注意:现代编译器可能会对简单的%2操作进行优化,但在复杂表达式或循环中,显式使用位运算仍能带来提升
3.2 案例二:权限校验优化
原始权限校验:
python复制def has_permission(user, permission):
return permission
