This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于代码的优化



我在网上看到关于MSP430C程序代码的优化

a = a* 9 ; 用

a =(a<<3)+a;

但是我看了好久都没有看出规律呀

  • 1.利用移位与加法的组合代替乘法,a<<3即是a*8,所以a* 9  =(a<<3)+a,这个需要自己拆分,凡是2的指数次幂的部分都可以用移位,移位位数等于2的指数,剩下部分以此类推,只有最后一个使用加a或者没有最后一位;

    2.MSP430系列MCU中有很多有MPY即硬件乘法器(CC430,FR5XXX,F5XXX,F6XXX,F4XXX,F1XX,F2XXX等都有带),m默认情况下硬件乘法器是打开的,编译器会将乘法操作编译成MPY的运行指令,其运行乘法效率也挺高的,运算时所需要的时钟周期见下图;

  • 再举个例子,比如a=a*15,则可改写成a=a*8+a*4+a*2+a=(a<<3)+(a<<2)+(a<<1)+a

  • 这就是用移位,加法来替乘法运算。C语言需要编译为汇编语言,乘法所占用的汇编代码比较大,所以在没有硬件乘法器的时候可以使用其他方式来代替乘法运算。这只是C程序优化的一小部分