如果您恰好使用2的幂,则在大多数(甚至甚至是所有)CPU上,向左和向右移位位显然比乘法和除法运算快。但是,对于某些阅读器和某些算法,这样做可能会降低代码的清晰度。移位确实是提高性能所必需的,还是我可以期望编译器或VM注意到这种情况并对其进行优化(特别是当2的幂是文字时)?我主要对Java和.NET的行为感兴趣,但也欢迎对其他语言实现有深入的了解。
int i
,该语句(i << 3)
比(i * 8)
Release模式下的语句快15%到25%。这在各种条件执行流中都是一致的,因此它似乎不是最优化。绝对应该在性能至关重要的循环中对自己进行测试。JVM比.NET CLR更加优化,因此,如果这种特殊的低效率仅适用于.NET,这也不会令我感到惊讶。