除法运算就是移位和相减

来源:互联网 发布:数据库课程设计源代码 编辑:程序博客网 时间:2024/05/29 11:56
2进制完成除法运算就是移位和相减,比如1011011除以1110顺序如下: 
            1   -   1110   不够减,   结果添0,   1左移一位再加上原来1后的0,为10 。
          10   -   1110   不够减,   结果添0,   10左移一位再加上原来10后的1,为101 。
        101   -   1110   不够减,   结果添0,   101左移一位再加上原来101后的1,为1011 。
      1011   -   1110   不够减,   结果添0,   1011左移一位再加上原来1011后的0,为10110 。
    10110   -   1110   =   1000     结果添1,同上左移加原来10110后的1得   10001 。
    10001   -   1110   =   11         结果添1,同上左移加原来101101后的1得   111 。
        111   -   1101   不够减,结果添0,此时1011011所有位都已移完,运算完毕 。
    即   1011011   =   1110   *   0000110   +   111 。
也即   91   =   14   *   6   +   7  。
由于你相除的两个数放在两个数组中,比如A[]与B[],要模拟这种运算的话就需要能不 
断地从A中取出其二进制的高位,添加到一个当前值的数组C[]中,而实际进 
行运算的就是C与B。数组单元的类型必然是多位的,你必须要实现做到对数组C[]左移
一位的操作,剩下的就是判断C够不够减B(即C数组的数是不是比B大)了。 

至于左移,我想大家都想到了,其实C和B是倒序存放的,以数组单元为8位为例, 
C[0]存放着C的最低8位,用表达式表示就是   C[0]   =   C   &   0xff,   C[1]   =   C   &   0xff00,   ... 
这样当移位时,只要保留当前单元C[i]的最高位,即h   =   C[i]   > >   7,然后直接对 
C[i]左移一位即   C[i] < <1,然后再加上上一单元C[i-1]保留的最高位即得到当前的C[i] 
对于C[0]来说,它的上一单元的最高位自然就是A的最高位了。
0 0
原创粉丝点击