如何用右移位除以 2 的非幂来除一个数
How do divide a number with right Bit shift by non power of 2
我需要使用位移运算将一个数除以 12。通过乘法,您可以添加 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);
}
希望对您有所帮助
我需要使用位移运算将一个数除以 12。通过乘法,您可以添加 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);
}
希望对您有所帮助