第一个操作是否比第二个更快?
u+= (u << 3) + (u << 1) //first operation
u+= u*10 //second operation
基本上他们两个都做同样的事情u= u+(10*u)
但我开始知道第一次操作比第二次更快。
操作时的cpu时间是否与*不同。 Is multiplication by 10
actually equivalent to 10 addition operations being performed ?
答案 0 :(得分:15)
这取决于底层CPU和编译器的功能。
任何体面的编译器都应该优先u*10
进入适当的位移操作,如果它认为它们会更快。它可能无法做相反的事情。所以总是写u*10
,如果你的意思是u*10
,除非你知道你正在使用一个糟糕的编译器。
答案 1 :(得分:6)
使用 探查器 并观察生成的 计算机代码 。
执行时间不太可能存在差异,因为编译器可能会优化两个相同的机器代码。
我刚刚在2上进行了快速配置测试以断言我的主张。我制作了2个小二进制文件(每个操作一个)并定时执行以处理10e6整数值。两者都在我的机器上报告~38毫秒(mac i7使用g ++)。因此,可以安全地假设两者最终都以相同数量的操作结束。对于其他编译器/处理器组合,结果可能是相同的。
。 。 。如果两者都具有相同的性能用途:
u+= u*10 //second operation
..只是因为一眼就能更容易理解。
答案 2 :(得分:4)
取决于编译器的翻译和处理器。有些处理器具有乘法单元,因此实际乘法只需要一条指令。
到目前为止,第一个要求至少3条指令。
如有疑问,请参阅。