热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

原码和补码的除法运算

《原码除法》手动计算:计算机计算:方法一:恢复余数法1.被除数、余数存储在ACC中,除数存储在通用寄存器中,商存储在MQ中

《原码除法》


手动计算:

在这里插入图片描述


计算机计算:

在这里插入图片描述
方法一:恢复余数法
在这里插入图片描述
1.
被除数、余数存储在ACC中,除数存储在通用寄存器中,商存储在MQ中。
2.
因为计算机不知道商0还是商1,但是会默认先商1,所以恢复余数法就是如果商错了,重新商0,并且修改存储在ACC中原本计算出错的余数,使其恢复正确。
3.
图中深灰色的最低一位就是最先参与运算的商,例如图中的例子,计算机会默认先商1,1乘以除数并被送入ALU中参与运算,同时ACC中的被除数也会被送入ALU中参与运算,加法器通过补码实现原码的减法运算(A - B = A +[-B]补),被除数减去除数就能得出第一个余数,但是此时余数的符号位是1,是个负数,说明商错了,此时计算机就明白过来了,应该要商0才对,但是商0不代表要重新计算,此时ACC中的错误余数会被送入ALU中,把错误的余数加上除数,运算结果就是被除数的值,而此时被除数的值也是商0时得出的第一个正确余数,恢复好的余数会被重新送回ACC中。
在这里插入图片描述
图中例子得出了01011五位的余数,如果按照手动计算,因为余数是正数,最高位的符号位必为0,可以忽略,末尾补0,从下一位开始错位运算,那么计算机该如何计算?
在这里插入图片描述
计算机会把所得的余数逻辑左移一位,即ACC、MQ整体逻辑左移,MQ中的最高位(都是0)往前移一位,移到ACC的最低位,而ACC中的每一位都往前移一位,原本ACC中的最高位就会被丢弃,原本MQ中最低位会空出来,用0补上。
在这里插入图片描述
最后重复以上步骤,直到存储商的MQ用完。

手动实现计算机操操作:
在这里插入图片描述

在这里插入图片描述
方法二:加减交替法(不恢复余数法)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
注意:这里探讨的是定点小数的除法,所以我们最终得到的商肯定也是一个定点小数,而不能是一个整数,因此在定点小数的除法运算当中规定:被除数一定要小于除数,因为被除数大于除数的话,商的结果肯定就大于1了,而定点小数无法表达大于1这样的一个范围,那计算机又是怎样检查除数和被除数的大小关系的呢?其实就是通过第一步的商来确定的,第一步 被除数-(商 * 除数)得到的余数一定要是个负值,如果第一步得到的就是一个正值,那么就说明被除数比除数更大,那么此时硬件电路就会检测出这个问题,并且直接停止除法的运算,因为这种除法是没办法用定点小数来表示的。

——————————————————————————————————————


《补码除法》

加减交替法:
在这里插入图片描述
所以案例中的最终结果为:
在这里插入图片描述
原码与补码加减交替法的相同点与不同点:
在这里插入图片描述


推荐阅读
author-avatar
888真人游戏官网1
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有