c++ - 在 C 中使用移位运算符进行乘法和除法实际上更快吗?

可以使用位运算符来实现乘法和除法,例如

i*2 = i<<1
i*3 = (i<<1) + i;
i*10 = (i<<3) + (i<<1)

等等。

使用say (i<<3)+(i<<1) 真的更快吗?乘以 10 而不是使用 i*10直接地?有没有哪种输入不能以这种方式相乘或除法?

最佳答案

简短回答:不太可能。

长答案: 您的编译器中有一个优化器,它知道如何在目标处理器架构的能力范围内尽可能快地进行乘法运算。您最好的选择是清楚地告诉编译器您的意图(即 i*2 而不是 i

底线——不要花很多时间担心这个。如果你的意思是转移,转移。如果你的意思是乘,乘。做语义上最清晰的事情——你的同事稍后会感谢你的。或者,如果你不这样做,以后更有可能诅咒你。

https://stackoverflow.com/questions/6357038/

相关文章:

c++ - 为什么人们说使用随机数生成器时存在模偏差?

c++ - 我可以使用 break 退出多个嵌套的 'for' 循环吗?

c++ - 空终止字符串的基本原理是什么?

c++ - 删除 NULL 指针是否安全?

c++ - 如何将彩色文本输出到 Linux 终端?

c++ - 在 C/C++ 中检测多余的#include?

c++ - 使用字符串分隔符(标准 C++)在 C++ 中解析(拆分)字符串

c++ - new/delete 和 malloc/free 有什么区别?

c++ - #pragma once 是安全的包含守卫吗?

c++ - 如何迭代枚举?