C,乘法,位操作或*

时间:2011-03-25 07:41:10

标签: c

我必须做很多乘法运算。如果我考虑效率,那么我应该使用位操作而不是常规*操作吗?如果位操作有差异怎么办?提前谢谢..

4 个答案:

答案 0 :(得分:12)

不,你应该使用乘法运算符,让优化编译器决定如何最快地完成它。

您会发现编译器知道如何针对它所针对的任何平台做到最好。更重要的是,如果你开始编写位移操作而不是乘法或除法,你的代码将很快变得不可维护。

答案 1 :(得分:3)

优先考虑代码优化的可读性,让编译器为您完成。

不要尝试使用二进制文件,因为:

  • 反正它可能不会更快
  • 如果你不知道如何真正做位操作,你就更容易搞砸了。

答案 2 :(得分:2)

不,有两大原因:

  1. 您的硬件可能内置了对乘法的支持。这种内置支持可能比您在软件中实现的任何内容都要快得多。即使没有硬件支持,编译器也可能有一个经过深思熟虑且保证可以正常工作的预定义算法。
  2. 除非您对按位逻辑和乘法算法非常满意,否则您很可能会犯错误,更不用说花费大量时间来尝试正确实现它。
  3. 只有少数情况我可以想到您甚至可能会开始考虑自定义解决方案:

    1. 您正在实施自己的号码表示原理图(非常罕见,但我已经看过它,特别是遗留代码)
    2. 您正在实施“大号”数据类型。然而,再次这很难做得很好,找到一个已经实现的库会更好。
    3. 你使用按位移位进行简单乘法2 ^ n,但这应该谨慎使用(我通常只在提高可读性时才这样做,而不是为了提高速度)

答案 3 :(得分:1)

位操作只能用于使用<<<<<<<<<<<<<<运算符(按位移位)

我记得还有其他方法可以改进乘法,例如预先计算产品和存储在矩阵中,但所有这些都取决于您在应用程序中的要求。