概述
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的最高位了。
最后
以上就是朴素小刺猬为你收集整理的除法运算就是移位和相减的全部内容,希望文章能够帮你解决除法运算就是移位和相减所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复