我在网上看到关于MSP430C程序代码的优化
a = a* 9 ; 用
a =(a<<3)+a;
但是我看了好久都没有看出规律呀
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.
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的运行指令,其运行乘法效率也挺高的,运算时所需要的时钟周期见下图;

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