复杂运算简化
概念
强度削弱(Strength Reduction)是用更轻量级的运算替换开销较大的运算,以提升程序执行效率。
常见替换模式
| 原始运算 | 替换方案 | 说明 |
|---|---|---|
i * 8 | i << 3 | 用移位替代乘法 |
i * 15 | (i << 4) - i | 移位+减法 |
i / 2 | i >> 1 | 无符号整数除以2的幂 |
i * k | 多次加法累积 | 循环中用加法累积替代乘法 |
现代编译器的自动优化
现代优化编译器(如 GCC -O2)通常会自动进行这些替换,但对于非常数乘数或特定情况,手动优化仍有意义。
注意事项
- 移位替代除法仅适用于无符号整数或已知非负的有符号数
- 浮点运算的强度削弱需谨慎,可能改变精度
- 过度优化可能降低代码可读性
相关笔记:
链接到
- 上一个知识点:5.2 代码移动
- 下一个知识点:5.4 共享公用子表达式