除法运算

转自

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的最高位了。

猜你喜欢

转载自blog.csdn.net/janeqi1987/article/details/87855693
今日推荐