如何用右移位除以 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);
}

希望对您有所帮助