【问题标题】:Bitwise division by 10按位除以 10
【发布时间】:2016-03-31 18:23:19
【问题描述】:

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

【问题讨论】:

  • 如果你仔细阅读这个问题,我是说我正在使用一个 8 位宽的寄存器。这个问题的答案是将一个数字移动 32。

标签: bit-manipulation bit bit-shift


【解决方案1】:

考虑到有限的范围(只有 10 个可能的结果),您可能会使用一种二分搜索做得更好:如果 n

【讨论】:

    【解决方案2】:

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

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

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

    (话虽这么说,尝试对非常小的数字进行优化可能不值得)

    【讨论】:

      猜你喜欢
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 2020-03-04
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      相关资源
      最近更新 更多