在现代处理器上使用按位运算真的比常规数学更快吗?
本文关键字:常规数 真的 运算 处理器 | 更新日期: 2023-09-27 18:34:54
我已经看到多个来源(一些在这里,以及维基百科关于按位运算的文章(说使用位移位计算比正常的乘法/除法/加法更快。 但是,他们还提到,这仅适用于较旧的处理器,并且大多数现代处理器都使速度几乎相同。
这种说法的效力如何?在 Java 或 C# 中只使用常规数学操作数是否安全?使用位移来替代这些操作数真的有必要了吗?
你只需将其留给编译器即可。优秀的编译器知道他们所针对的硬件。如果编译器知道按位运算更快,那么它可以发出代码以这种方式执行此操作。您应该始终以最清晰的方式编写人类可读的代码,以正确表达正在执行的操作的方式。让编译器完成剩下的工作。
至于按位运算是否仍然比算术快,我相信是的。当然,许多现代C++编译器会发出使用按位运算进行算术的代码。
我不确定在当今的架构和编译器上使用按位运算和使用简单运算符之间的区别有多大(我的猜测是......在大多数问题上几乎没有(。
我的预感是基于这样一个事实,即你现在编写的大多数代码并没有真正成为 CPU 操作的瓶颈,而是数据库访问、I/O、网络(是的,我在这里是多余的(。
例如,JVM的编译器已经优化了运行代码的架构的许多操作,将这种必要性从开发人员那里抽象出来(这就是它的目的(。
我想说的最后一点是...可读性很重要。无论一些按位运算粉丝会争论什么,大多数开发人员通常对代码中间的按位运算的可读性要比简单地使用标准数学要低得多。
恕我直言,理解代码的成本以及当需要更改代码时有人引入错误的可能性增加使得风险远远超过收益。编写高效的代码很重要,但它仍然必须被人类阅读。
免责声明:可能在某些域中,数学运算的数量可能成为一个因素,但这肯定不是常态。