无符号整数的非还原除法

在之前的帖子中 恢复分裂 学会了恢复分裂。现在,在这里执行非恢复除法,它比恢复除法复杂,因为涉及更简单的操作,即加法和减法,现在也执行恢复步骤。在该方法中,依赖于寄存器的符号位,该寄存器最初包含名为A的零。

null

下面是流程图。

图片[1]-无符号整数的非还原除法-yiteyi-C++库

让我们选择所涉及的步骤:

  • 第一步: 首先用相应的值初始化寄存器(Q=被除数,M=除数,A=0,n=被除数中的位数)
  • 第二步: 检查寄存器A的符号位
  • 第三步: 如果是1,左移AQ的内容并执行A=A+M,否则左移AQ并执行A=A-M(意味着向A添加2的M补码并将其存储到A)
  • 第4步: 再次显示寄存器A的符号位
  • 第五步: 如果符号位为1,Q[0]变为0,否则Q[0]变为1(Q[0]表示寄存器Q的最低有效位)
  • 第6步: N的值递减1
  • 7-7步: 如果N不等于零,则转到 第二步 否则进入下一步
  • 第8步: 如果A的符号位为1,则执行A=A+M
  • 第9步: 寄存器Q包含商和A包含余数

    例如: 对无符号整数执行非除法

    Dividend =11
    Divisor  =3  
    -M =11101
    
    N M A. Q 行动
    4. 00011 00000 1011 起点
    00001 011_ 左移AQ
    11110 011_ A=A-M
    3. 11110 0110 Q[0]=0
    11100 110_ 左移AQ
    11111 110_ A=A+M
    2. 11111 1100 Q[0]=0
    11111 100_ 左移AQ
    00010 100_ A=A+M
    1. 00010 1001 Q[0]=1
    00101 001_ 左移AQ
    00010 001_ A=A-M
    0 00010 0011 Q[0]=1
    Quotient  = 3 (Q)
    Remainder = 2 (A)
    
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享