2010-07-13 32 views
0

可能重复更高效:
Is shifting bits faster than multiplying and dividing in Java? .NET?要加倍的值,是<< 1比* 2

要加倍的值,是<<1比现代语言*2更好的性能?

我对Java和C#特别感兴趣。在编译时打开优化是否会改变事物?

+0

我相信这是一个骗局。 – 2010-07-13 18:41:17

+0

我看了又找不到,但如果别人可以指给我,我会删除。 – 2010-07-13 18:41:43

+2

不要担心这些小事情。想想很大。 – polygenelubricants 2010-07-13 18:45:45

回答

10

如果在过去的20年中编写的任何编译器生成*2的代码效率低于<<1,则应该保持非常远离它。

+0

+1,因为这基本上是真实的,但魔鬼的倡导者:如果你在编译时知道你会乘以2的幂,但你不知道2的幂。如果你将乘以两次相同的幂次,那么找到对数和移位可能是有用的。一个例子是缓存对齐的数据结构。缓存行大小(AFAIK)总是2的幂,但不是编译时已知的。 – dsimcha 2010-07-13 19:15:34

+0

@dsimcha:是&否。 'X << Y'与'X *(1 <<(Y-1))'相同。假设在应用程序运行期间Y是稳定的,我们可以定义'z = 1 <<(Y-1);'我们有X << Y对X * Z.或者用明智的名字:'NumStructs << AlignmentShift'和'NumStruct * AlignmentSize'。后者更清楚。 – 2010-07-13 19:27:25

相关问题