C/C++代码优化的一些总结
1、%(取余)操作可用&(位与)运算代替
当取余的分母为2的幂次时,可用位与&运算取代,如a%2可用a&1取代,a%4可用a&3取代,a%8可用a&7取代...
分析:分母为2的幂次,则当表示为二进制时,必然只有一位为1而其余全为0,由此,当某个数表示为二进制时,高于/等于该位的部分一定是该分母的整倍数,低于该位的部分则是余数。因此,要求余数,则通过将低于该位的所有位都置1来提取。亦即,如果低于该位的位数为2位,即二进制数11,即为十进制数3。
2、%(取余)操作可用>>、<<(移位)运算代替
分析:例如:100 % 8 = 100 % (2^3) = 100 - ((100 >> 3) << 3)。原理跟位与类似。先将被取余数右移3位,即把右边2^2、2^1、2^0三位的数移除,再将结果左移3位,此时2^2、2^1、2^0三位上的值必然为0。再用原数减去该值,便可得原数在该三位上的值,而该值即为余数。