在现代处理器上使用按位运算真的比常规数学快吗?

时间:2012-05-22 15:16:50

标签: java c# bit-manipulation operator-keyword bit-shift

我见过多个来源(这里有一些,关于按位操作的维基百科文章)说使用比特移位来计算比正常的乘法/除法/加法更快。然而,他们也提到这只适用于较旧的处理器,并且大多数现代处理器都使其速度几乎相等。

该声明的有效性如何?在Java或C#中使用常规数学操作数是否安全?是否正在使用bithifting作为那些真正需要的操作数的替代?

2 个答案:

答案 0 :(得分:9)

您只需将其留给编译器即可。好的编译器知道他们所针对的硬件。如果编译器知道按位操作更快,那么它可以发出代码来执行此操作。您应该始终以最清晰的方式编写人类可读代码,正确表达正在执行的操作的方式。让编译器完成剩下的工作。

至于是否仍然可以按位运算比算术更快,我相信它们是。当然,许多现代C ++编译器将发出使用按位运算进行算术运算的代码。

答案 1 :(得分:2)

我不确定在今天的体系结构和编译器上使用按位运算和使用简单运算符之间的区别是什么(我的猜测是......在大多数问题上几乎没有)。

我的预感基于这样一个事实,即你现在编写的大多数代码并不是CPU操作的瓶颈,而是数据库访问,I / O,网络(是的,我在这里是多余的)。< / p>

例如,JVM的编译器已经优化了运行代码的架构的大量操作,将这种必要性从开发人员那里抽象出来(这就是它的用途)。

我想说的最后一点是......可读性计数。无论一些按位操作粉丝会争论,代码中间的按位操作通常很多不太可读,大多数开发人员只需使用标准数学。

理解代码的成本以及当代码需要更改时有人会引入错误的可能性增加,恕我直言,风险远远超过了收益。编写有效的代码很重要,但它仍然必须是人类可读的。

免责声明:可能是某些域,其中数学运算的数量可能会成为一个因素,但这肯定不是常态。