整数乘法(暂时忽略除法)之间的差额是否仍支持移位,如果有的话,该差额有多大?

即使您想要它,它似乎也是如此低级的优化,即使在大多数情况下,(C#/Java)字节码编译器或jit也不应该捕获它吗?

注意:我测试了C#的编译输出(使用gmcs Mono C#编译器版本2.6.7.0),并且即使乘以2的倍数,乘法示例也不使用shift进行乘法。

C#
http://csharp.pastebin.com/hcrRnPrb

纤丝
http://csharp.pastebin.com/0js9F2c1

P.S.
我忘记了在字节上使用它可能会有些有用,但是在将其用于Numbers时仍然遇到一些麻烦。

最佳答案

没错,如果仅将移位运算符用作乘法的替代项,则应将其留给编译器。

我想您忽略了以下应用程序:

  • 加密/解密
  • CRC计算
  • 位图操作(图形,数据库锁)
  • 压缩/解压缩
  • 设置硬件寄存器的数据
  • 更改编码

  • 而且,在不使用 native 代码的情况下,更需要位纠缠来有效实现。

    09-11 09:19