为什么原码的除法,余数与商的正负性相同? 原码不恢复余数除法
计算机算出的负数的商和余数,怎么和定义不同?
在计算机语言里面,余数是和被除数的符号相同的,所以会出现你所说的情况。
重点在于这句话的表意“不超过除数的正整数”。这里说了是正整数,但是实际情况是,计算机中对负数的取余操作和书面的数学定义是不一样的。所以在科学计算的时候需要注意加以区分。详细的原因解释请见参考资料。
原码一位除法中为什么会牵涉到补码的运算?
l笔算特点:
(1) 每次都是由心算来比较余数和除数的大小,余数大时,商1;余数小时,商0。第一次比较时,余数就是被除数。
(2) 每做一次减法,总是保持余数不动,而除数向右移一位。
(3) 商的符号单独处理。
为适应机器运算,需要进行改进:
(1)用补码加代替直接减(两个符号位)
(2)除数右移改为余数左移。
原码加减交替除法
原发布者:大秦之帝1
ri+1=2ri-y 若ri<0,则先恢复余数,再商0,余数和商左移1位,再减去除数,即
ri+1=2(ri+y)-y=2ri+y 由以上两点可以得出原码加减交替法的运算规则: 若ri>0,则商1,余数和商左移1位,再减去除数,即ri+1=2ri-y; 若ri<0,则商0,余数和商左移1位,再加上除数,即ri+1=2ri+y。 由于此种方法在运算时不需要恢复余数,因此称之为不恢复余数法。原码加减交替法是在恢复余数的基础上推导而来的,当末位商1时,所得到的余数与恢复余数法相同,是正确的余数
用原码一位除恢复余数和不恢复余数计算X/Y求出商及余数,X=-0.01110,Y=-0.10101
用原百码一位除恢复余数和不恢复余数计算X/Y求出商及余数,X=-0.01110,Y=-0.10101。
原码的缺点:原码不能直接参加运算,可能会出错。例如数学上,(-1)=000000001+10000001=10000010,换算成十进制为-2。显然出错了。所以原码的符号位不能直接参与运算,必度须和其他位分开,这就增加了硬件的开销和复杂问性。
扩展资料:
编码方式:
原码是有符号答数的最简单的编码方式,便于输入输出,但作为代码加减运算时较为复杂。一个字长为n的机器数能表示专不同的数字的个数是固定的2^n个,n=8时2^n=256;用来表示有符号数,数的范围就是 -2^(n-1) ~ 2^(n-1)-1,n=8时,这个范围就是 -128 ~ +127。
但是在不需要考虑数的正负时,就不需要用一属位来表示符号位,n位机器数全部用来表示是数值,这时表示数的范围就是0~2^n-1,n=8时这个范围就是0~255.没有符号位的数,称为无符号数。
参考资料来源:百度百科-原码