可能的重复:
移位比Java中的乘法和除法更快吗?。网?
快速Java优化问题
很多年前在大学里,我了解到右移一位与除以二的效果相同,但通常要快得多。我不确定自 9 到 10 年前我了解到 Java 在这方面是如何发展的。Java编译器会自动将除以二转换为移位操作,还是我应该自己在代码中手动执行移位操作?
可能的重复:
移位比Java中的乘法和除法更快吗?。网?
快速Java优化问题
很多年前在大学里,我了解到右移一位与除以二的效果相同,但通常要快得多。我不确定自 9 到 10 年前我了解到 Java 在这方面是如何发展的。Java编译器会自动将除以二转换为移位操作,还是我应该自己在代码中手动执行移位操作?
除非您在商店和代码库中工作,否则移位很常见,恕我直言,您冒着混淆的风险。是的,这些表达式在逻辑上可能是等价的,但是:
所有这些都是相对的,同样,真的取决于您商店的标准。如果您的同事喜欢位移,那么请务必继续进行位移。
是的,这是任何试图进行编译器优化的人都会做的第一件事(并且已经做了至少 5 年),它肯定是由 Java JIT 编译器完成的,你可能很难找到任何不这样做的编译器。
即使他们不这样做,它仍然是一个过早的微优化,应该避免有利于让代码更清晰。
现代编译器足够聪明,可以生成最快的除以二的代码。如果速度更快,他们会换班。如果你想要实现的是除以 2,那么使用除法会让你的代码更清晰。当被除数为负数时,您将避免出现问题。
您的 CPU 的除法例程将处理此问题。你没有必要这样做。
这称为过早优化。