📜  无符号整数的非恢复除法算法的实现

📅  最后修改于: 2021-04-28 17:22:49             🧑  作者: Mango

在上一篇文章中,我们已经讨论了非恢复除法算法。在本文中,我们将讨论该算法的实现。

非还原除法算法用于除以两个无符号整数。该算法的另一种形式是恢复分区。该算法与其他算法不同,因为这里没有恢复的概念,并且该算法比恢复除法算法复杂。设被除数Q = 0110和除数M =0100。下表演示了给定值的分步解决方案:

Accumulator-A(0) Dividend-Q(6) Status

0000 0111 0101(M)

0000 111_
Operation:A – M 1011 1110 Unsuccessful(-ve)
A+M in Next Step
Step2:Left-Shift
0111 110_
Operation:A + M 1100 1100 Unsuccessful(-ve)
A+M in Next Step
Step3:Left-Shift
1001 100_
Operation:A + M 1110 1000 Unsuccessful(-ve)
A+M in Next Step
Step4:Left-Shift
1101 000_
Operation:A + M 0010 0001 Successful(+ve)
Remainder(2) Quotient(1)

方法:从上述解决方案中,我们的想法是观察到计算所需的商和余数所需的步骤数等于被除数中的位数。最初,让红利为Q,除数为M,累加器A =0。因此:

  1. 在每一步中,将股息左移1个位置。
  2. 从A减去除数(A – M)。
  3. 如果结果是肯定的,则该步骤称为“成功”。在这种情况下,商位将为“ 1”,并且不需要恢复。因此,下一步也将是减法。
  4. 如果结果是否定的,则认为该步骤“不成功”。在这种情况下,商位将为“ 0”。在此,不像恢复分割算法那样执行恢复。相反,下一步将是加法代替减法。
  5. 对股息的所有位重复步骤1至4。

下面是上述方法的实现:

Initial Values
输出:
Step1:Left-Shift