可能重复更高效:
Is shifting bits faster than multiplying and dividing in Java? .NET?要加倍的值,是<< 1比* 2
要加倍的值,是<<1
比现代语言*2
更好的性能?
我对Java和C#特别感兴趣。在编译时打开优化是否会改变事物?
可能重复更高效:
Is shifting bits faster than multiplying and dividing in Java? .NET?要加倍的值,是<< 1比* 2
要加倍的值,是<<1
比现代语言*2
更好的性能?
我对Java和C#特别感兴趣。在编译时打开优化是否会改变事物?
如果在过去的20年中编写的任何编译器生成*2
的代码效率低于<<1
,则应该保持非常远离它。
+1,因为这基本上是真实的,但魔鬼的倡导者:如果你在编译时知道你会乘以2的幂,但你不知道2的幂。如果你将乘以两次相同的幂次,那么找到对数和移位可能是有用的。一个例子是缓存对齐的数据结构。缓存行大小(AFAIK)总是2的幂,但不是编译时已知的。 – dsimcha 2010-07-13 19:15:34
@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
我相信这是一个骗局。 – 2010-07-13 18:41:17
我看了又找不到,但如果别人可以指给我,我会删除。 – 2010-07-13 18:41:43
不要担心这些小事情。想想很大。 – polygenelubricants 2010-07-13 18:45:45