除法运算就是移位和相减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的最⾼位了。
——————————————————————
来自百度文库VIP复制全文特权
完整内容请点击:https://wxaurl.cn/XVf0sr4Q8ho
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。