我需要使用移位运算将数字除以12。使用乘法,可以将2的幂加起来,直到获得所需的数字,但是该方法似乎不适用于此处。
答案 0 :(得分:2)
通过使用移位操作从Hackers Delight知道解决方案
unsigned divu12(unsigned n) {
unsigned q, r;
q = (n >> 1) + (n >> 3);
q = q + (q >> 4);
q = q + (q >> 8);
q = q + (q >> 16);
q = q >> 3;
r = n - q*12;
return q + ((r + 4) >> 4);
// return q + (r > 11);
}
希望这对您有帮助