【问题标题】:right shift a binary for division右移二进制除法
【发布时间】:2014-03-12 10:42:27
【问题描述】:

我了解到,如果您想将任何二进制数与任何二进制数相乘,请执行以下操作:

  1. 您将作为乘数的数字分隔为仅包含一个 1 的二进制数。示例:

00000101 = 00000100, 00000001。

  1. 然后你对那些新数字进行左移

  2. 然后你简单的添加结果。

那么任何数的除法呢?

我听说你做了右移,但这仅适用于除以 2。但我想要任何数字除以。我不是在谈论浮动数字。但是我怎么能把 25 / 5 分成二进制呢?

请举个例子,非常感谢!

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

任意数的乘法示例:

00001111 * 00000101 表示:

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

【问题讨论】:

  • 通过移位,您只能乘/除以 2 的幂。对于任何其他乘数/除数,您必须以其他方式进行。顺便说一句,你能举一个你提到的乘法方法的例子吗?
  • 你看过这些123

标签: c bit division


【解决方案1】:

它对除法不起作用。

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

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

除法不分配

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

【讨论】:

  • 请您解释一下如何划分 2 个二进制数?例如1111:101?我试图理解,但我在这里得到的解释并不简单...... :(
  • @int80 就像普通的十进制除法一样
【解决方案2】:

这种方式不起作用,仅适用于 2 的幂。但是,除以 2 的幂以外的整数除以某些方法是可能的。见Hacker's delight - Integer division by constants .

【讨论】:

    猜你喜欢
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多