如何用右移数除以2的非幂

时间:2018-12-06 06:49:39

标签: c bit-manipulation bitwise-operators bit-shift

我需要使用移位运算将数字除以12。使用乘法,可以将2的幂加起来,直到获得所需的数字,但是该方法似乎不适用于此处。

1 个答案:

答案 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);
}

希望这对您有帮助