除法运算就是移位和相减

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的最高位了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值