可能重复:
Is shifting bits faster than multiplying and dividing in Java? .NET?
Quick Java Optimization Question
许多年前,在大学里,我学会了正确地按位移动实现与除以2相同的操作,但通常要快得多。自从9-10年前我了解到这一点以来,我不确定Java在这方面是如何出现的。 Java编译器是否自动将二分频转换为位移操作,还是应该自己在代码中手动执行位移操作?
答案 0 :(得分:59)
除非你在一个商店和代码库中工作,其中比特移位是常见的,恕我直言,你冒着混淆的风险。是的,表达式可能在逻辑上等同,但是:
所有这些都是相对的,而且,真的取决于您的商店标准。如果你的同事喜欢按位移动,那么无论如何都要按顺序转移。
答案 1 :(得分:19)
现代编译器非常聪明,能够为两个部门生成最快的代码。如果速度更快,他们会做出改变。如果你想要实现的是除以2,使用除法将使你的代码更清晰。当要分割的数字是负数时,你将避免出现问题。
答案 2 :(得分:15)
是的,这是任何尝试进行编译器优化的人都会做的第一件事(并且已经完成了至少50年),它肯定是由Java JIT编译器完成的,你可能有一个非常好的很难找到任何不这样做的编译器。
即使他们没有,但仍然应该避免过早的微优化,以使代码更清晰。
答案 3 :(得分:11)
CPU的分区例程将处理此问题。你没有必要这样做。
这称为过早优化。