【问题标题】:Multiplying an unsigned integer by 10 with limited bitwise operators使用有限的位运算符将无符号整数乘以 10
【发布时间】:2014-03-01 22:04:58
【问题描述】:

这是一个模拟考试的问题:

编写一个将参数乘以 10 的函数。您只能使用以下运算符:

函数原型为:

无符号整数(无符号整数 x);

我们得到了一个解决方案,那就是:

unsigned int(unsigned int x) { 
    return (x << 4) - (x << 2) - (x << 1); 
} 

我知道它有效,并且它通过从整数中减去十的倍数来实现。我不明白它为什么起作用,并想了解如何得出这个答案的过程。

提前感谢您的任何回答!

【问题讨论】:

    标签: c bitwise-operators


    【解决方案1】:

    (x &lt;&lt; 4)本质上是x * 16(x &lt;&lt; 2)x * 4(x &lt;&lt; 1)x * 2。因此,16x - 4x - 2x = 10x

    至于为什么(x &lt;&lt; 4)等于x * 16,是因为二进制表示。让我们以二进制形式取 10(为清楚起见,仅显示了 8 位;实际上左边还有一堆零):

    00001010
    

    现在让我们左移 4 个空格:

    10100000
    

    那是 160。

    一种思考方式是,当您在基数 10 中添加零(即 10 -> 100)时,您乘以 10。当您在基数 2 中添加零时,您乘以 2。因此,移动 4 个空格(因此添加 4 个零)乘以 2*2*2*2 = 16

    【讨论】:

    • 谢谢!这很有帮助!
    【解决方案2】:

    x

    x

    x

    16 - 4 - 2 = 10。

    你也可以使用:

    x

    但是 8 + 2 = 10,所以你可以使用 (x

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      • 2011-05-26
      • 2014-02-20
      • 1970-01-01
      • 2013-06-02
      • 2018-10-28
      相关资源
      最近更新 更多