1、用移位和加法院算的组合代替乘/除常数因子的乘法。
原因:大多数机器上,整数乘法指令相当地慢,需要12或者更多的时钟周期,除法需要39或者更多的时钟周期,而加减、位极运算和移位只需要1个时钟周期。
乘法的C表达式:
x<<k == x*2<sup>k</sup> ;
对于除法,当x>0时,可以直接右移,
x>>k == x / 2<sup>k</sup> (x>0);
但是若x<0,上述式子不成立,如果在右移前,先将x加上2k-1,可以得到正确的结果,即得到下式:
(x < 0 ? (x + (1 << k) - 1) : x) >>k == x / 2<sup>k</sup>;