按位除以 10

Bitwise division by 10

我想知道是否有一种简单的方法可以将范围为 [0,99] 的数字除以 10,只需进行移位、加、减等位操作即可。我正在寻找解决方案这将在 8 位宽的寄存器中工作,因为我看到一些解决方案涉及使用 32 位进行近似。

鉴于范围有限(只有 10 个可能的结果),您可能会使用一种二分查找法做得更好:if n<50 then if n<30 then if n<10 then return 0 else if n<20 return 1 else return 2 else if n<40 return 3 else return 4 else ...(handle 5..9)

指定的方法 here 可以推广到任何位宽。基本上,找到 (1/10) * 2**(位宽)然后将其乘以除数并右移位宽。

以编程方式使用 javascript,这是:

function bitwiseDivApprox(dividend) {
    var divisor = 26; // Math.ceil((1/10) * Math.pow(2, 8))
    return (divisor * dividend) >> 8;
}

(话虽如此,尝试针对非常小的数字进行优化可能不值得)