右移二进制进行划分

时间:2014-03-12 10:42:27

标签: c bit division

我了解到,如果您想将任何二进制数乘以您执行的任何二进制数:

  1. 你将二进制数中的乘数作为乘数,只保留一个。例如:
  2. 00000101 = 00000100,00000001。

    1. 然后你做那些新数字

    2. 的leftshift
    3. 然后您可以简单地添加结果。

    4. 那么任何数字的划分呢?

      我听说你做了正确的转变,但这只取得了除以2的分数。但是我想要任何数字除以。我不是在谈论浮点数。但是我如何将25/5分成二进制?

      请告诉我一个例子,非常感谢!

      我试图在右移一次减法之后(所以像乘法一样),但它不会起作用:(

      任何数字的乘法示例:

      00001111 * 00000101表示:

        

      00001111 * 00000100 + 00001111 * 00000001    = 00111100 + 00001111 = 01001011(结果)

2 个答案:

答案 0 :(得分:2)

它不适合分裂。

它适用于乘法的原因是因为multiplication is distributive over addition

17 * 5
17 * (4 + 1)
(17 * 4) + (17 * 1)

分裂不是分配

17 / 5
17 / (4 + 1)
(17 / 4) + (17 / 1) <== WRONG!!

答案 1 :(得分:0)

它不起作用,仅适用于2的幂。但是,有一些方法可以用除2的幂之外的整数除法。见Hacker's delight - Integer division by constants