计算机组成原理之运算器篇章---恢复余数法!详解+例子

本文详细介绍了如何使用恢复余数法解决负数除法问题,步骤包括处理负数恢复、避免错误的上商和移位,以求得[x/y]原的正确结果。实例演示了计算-0.1011除以-0.1101的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

基本思想:

恢复余数法,当余数为负数(即最高为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.对负数进行恢复时,不能进行移位操作;

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值