当前位置: 技术问答>linux和unix
求C语言写一段代码(关于除法)
来源: 互联网 发布时间:2017-02-07
本文导语: 根据: 2进制完成除法运算就是移位和相减,比如1011011除以1110顺序如下: 1 - 1110 不够减, 结果添0, 1左移一位再加上原来1后的0,为10 10 ...
根据:
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 * 0110 + 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] b[i])
return 1;
else if (a[i]
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 * 0110 + 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] b[i])
return 1;
else if (a[i]