在很多机器上,执行常数乘法会非常慢,需要更多的时钟周期,但是执行其他运算(加、减、与、或、非、异或、移位)只需要一个时钟周期,因此编译器会使用加、减、移位
的组合来替代乘法运算。
乘以2的幂:
例如 11 *4=44; 则11=01011;44=101100; 4=2^2;
可以看出11*4等价于将11左移2位;
推广下:
比如11*5;可以转换位 11*(2^2)+11*(2^0)=(11<<2)+11;
比如11*14;可以转换位11*(2^3+2^2+2^0)也能转换位11*(2^4-2^1);对于前一种将进行3次移位运算,而后面一种只进行2次;所以编译器可以选择第二种方案以优化运算速度。