我想知道是否有一种简单的方法可以将范围[0,99]中的数字除以10,只需执行按位操作,例如移位,加法,减法等。我正在寻找一种解决方案因为我看到了一些涉及使用32位进行近似的解决方案,所以我在8位宽的寄存器中工作。
答案 0 :(得分:1)
考虑到范围有限(只有10种可能的结果),你可以用一种二分法搜索做得更好:如果n <50,那么如果n <30,那么如果n <10,那么如果n&lt; 20则返回0如果n&lt; 40则返回3,否则返回2,否则返回4 else ...(句柄5..9)
答案 1 :(得分:0)
指定的方法here可以针对任何位宽进行推广。基本上,找到(1/10)* 2 **(位宽)然后乘以除数,右移乘位宽。
以编程方式使用javascript,这是:
function bitwiseDivApprox(dividend) {
var divisor = 26; // Math.ceil((1/10) * Math.pow(2, 8))
return (divisor * dividend) >> 8;
}
(这就是说,尝试对非常小的数字进行优化可能是不值得的)