【发布时间】:2011-04-19 16:41:17
【问题描述】:
整数乘法(暂时忘记除法)之间的差异是否仍然有利于移位,如果是,差异有多大?
这似乎只是一个低级优化,即使你想要它,在大多数情况下不应该 (C#/Java) 到字节码编译器或 jit 捕获它?
注意:我测试了 C# 的编译输出(使用 gmcs Mono C# 编译器版本 2.6.7.0),即使乘以 2 的倍数,乘法示例也没有使用 shift 进行乘法运算。
C# http://csharp.pastebin.com/hcrRnPrb
cil http://csharp.pastebin.com/0js9F2c1
附: 我忘记了在字节上使用它可能会有什么用处,但在将它用于数字时仍然有些麻烦。
【问题讨论】:
-
乘法并不是移位运算符的唯一用途。
-
有时位移运算符比乘法等效项更清晰。
-
你在看IL,你真的需要看到JIT编译后的机器码,才能判断框架是否正确优化了这些。
-
克里斯蒂安你的意思是分裂还是你在谈论别的什么?
标签: c# java low-level premature-optimization bit-shift