基本思想:
恢复余数法,当余数为负数(即最高为1时,为负数)时,需要加上除数,
将其恢复成原来的余数,而商值的大小是通过比较被除数和除数的绝对值的大小确定的。
步骤示例:
例题:
已知x=-0.1011,y=-0,1101,求[x/y]原?
已知x=-0.1011,y=-0,1101,求[x/y]原? [-y*]=-0.1101,[-y*]补=1.0011,[y*]=0.1101 被除数 商 操作 0.1011 0.0000 +[-y*]补 + 1.0011 -------------------------------------------------------------------------------------------------------------------- 1.1110 0 余数为负数,上商0; +0.1101 +[y*];//(记住当余数是负数的时候,只需要恢复余数正数即可); -------------------------------------------------------------------------------------------------------------------- 0.1011 0 这是刚恢复后的余数;//才记住恢复后的余数,不能商1记住切记切记; 1.0110 <<向左移一位; + 1.0011 +[-y*]补;//此时恢复后的余数为0.1011为正数,需要+[-y*]补; -------------------------------------------------------------------------------------------------------------------- 0.1001 01 此时余数为正数,上商1; 1.0010 <<向左移一位; + 1.0011 +[-y*]补;//只要余数是正数,则都需要进行+[-y*]补; -------------------------------------------------------------------------------------------------------------------- 0.0101 011 此时余数为正数,上商1; 0.1010 <<向左移一位; + 1.0011 +[-y*]补;//余数是正数,需要进行+[-y*]补; -------------------------------------------------------------------------------------------------------------------- 1.1101 0110 余数为负数,上商0; + 0.1101 +[y*]; -------------------------------------------------------------------------------------------------------------------- 0.1010 0110 这是刚恢复后的余数;//才记住恢复后的余数,不能商1记住切记切记 1.0100 <<向左移一位; + 1.0011 +[-y*]补;此时余数为正数; -------------------------------------------------------------------------------------------------------------------- 0.0111 01101 此时余数为正数,上商1;此时的商的位数与之前给出的商(00000)位数相同,则停止运算。 所以商的值为0.1101,确定商的符号位需要进行异或运算(异或运算,口诀,同为0,异为1); 异或运算: x@y=1@1=0; 所以商为正数!即[x/y]原=[x/y]补;
一定要注意这两步骤:
1.刚从负数恢复成正数的余数,切记不可上商1;
2.对负数进行恢复时,不能进行移位操作;