原码和补码的除法运算

本文详细介绍了原码除法的两种常见方法:恢复余数法和加减交替法。在恢复余数法中,通过判断商的正确性来恢复正确的余数,而加减交替法则通过不断调整余数来求解。在定点小数除法中,被除数必须小于除数以确保结果在定点小数范围内。文章还强调了计算机如何检查除数和被除数的关系,并指出在错误情况下如何停止运算。

《原码除法》

手动计算:

在这里插入图片描述

计算机计算:

在这里插入图片描述
方法一:恢复余数法
在这里插入图片描述
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这样的一个范围,那计算机又是怎样检查除数和被除数的大小关系的呢?其实就是通过第一步的商来确定的,第一步 被除数-(商 * 除数)得到的余数一定要是个负值,如果第一步得到的就是一个正值,那么就说明被除数比除数更大,那么此时硬件电路就会检测出这个问题,并且直接停止除法的运算,因为这种除法是没办法用定点小数来表示的。

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

《补码除法》

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

<think>好的,我现在需要帮助用户了解原码补码除法运算中的应用及实现方式。用户的问题比较明确,但可能需要一些基础知识的铺垫。首先,我得确认用户已经了解原码补码的基本概念,比如原码是符号位加上绝对值的二进制表示,补码则是用于简化加减法运算的表示方法。不过用户可能对这些基础已经有了一定的了解,所以接下来应该直接切入除法运算的具体实现。 根据提供的引用内容,用户给出的三个引用都涉及原码补码除法运算,特别是恢复余数法加减交替法。我需要将这些方法分步骤解释清楚,同时注意比较原码补码除法中的不同处理方式。 首先,原码除法运算。引用[1]提到恢复余数法,引用[2][3]也提到了恢复余数法加减交替法。原码除法的符号位处理是通过异或运算单独处理的,数值部分则是绝对值相除。恢复余数法的步骤包括:被除数减去除数,根据余数符号判断商位,若余数为负则恢复余数并商0,否则商1。这个过程需要循环执行,直到得到足够的商位数。这种方法比较直观,但效率较低,因为可能需要多次恢复余数。 然后是加减交替法,作为恢复余数法的优化版本。引用[2]指出,加减交替法通过交替进行加减操作,避免了恢复余数的步骤,从而提高了效率。具体步骤是根据余数的正负决定下一步的操作,余数为正则商1并左移后减除数,余数为负则商0并左移后加除数。这种方法减少了步骤,但需要注意最后是否需要恢复余数,通常在原码运算中最后可能需要恢复余数,而补码可能不需要。 接下来是补码除法运算,引用[2][3]提到补码除法使用加减交替法,但符号位不单独处理,而是通过余数除数的符号来判断商位。补码除法的初始操作取决于被除数除数的符号是否相同,同号则被除数减去除数,异号则加上除数。补码运算中,商的每一位根据余数除数的符号是否相同来决定,同号商1,异号商0。此外,补码除法最后一位商恒置为1,不需要恢复余数,这可能涉及到精度或余数调整的问题。 在整理这些步骤时,需要注意区分原码补码处理的不同之处,例如符号位的处理、余数的调整、商的确定方式等。同时,用户可能想知道为什么补码除法要最后一位恒置1,以及这样做的优点是什么。根据引用[2],这样做可能是为了简化操作,提高效率。 另外,引用[3]提到补码除法中使用的双符号位,这可能是为了防止溢出,或者在运算过程中更好地判断余数的符号。双符号位的处理需要详细说明,比如如何通过双符号位来判断余数的正负,以及如何影响后续的操作。 在回答用户的问题时,需要结构清晰,分点讲解原码补码除法实现方法,包括恢复余数法加减交替法,同时比较它们的异同。可能还需要举例说明运算步骤,但用户提供的引用中没有具体例子,可能需要根据理论知识来构造。 最后,生成相关问题时要围绕原码补码除法的步骤、优化方法、符号处理、应用场景等方面展开,确保问题能够帮助用户进一步深入理解该主题。</think>### 原码补码除法运算实现方法 #### 一、原码除法运算 原码除法运算的符号位与数值部分分开处理,符号位由被除数与除数的符号位异或得到,数值部分为绝对值相除。常用方法包括**恢复余数法****加减交替法**。 1. **恢复余数法** - **步骤**: 1. 初始化余数为被除数绝对值; 2. **余数减去除数绝对值**,得到新余数; 3. 若余数为负,则**恢复余数**(加回除数绝对值),商置0; 4. 若余数为正,商置1; 5. 余数左移一位,继续下一轮运算,直到得到所需精度[^1][^3]。 - **特点**:逻辑简单,但效率低(需频繁恢复余数)。 2. **加减交替法**(优化版) - **步骤**: 1. 余数为正时,商置1,余数左移后减去除数绝对值; 2. 余数为负时,商置0,余数左移后加上除数绝对值; 3. 循环执行,最后一步可能需要恢复余数[^2]。 - **特点**:减少恢复次数,效率更高。 #### 二、补码除法运算 补码除法直接处理符号位,运算过程统一用补码表示。核心方法是**加减交替法**,规则如下: 1. **初始操作**: - 若被除数与除数符号相同,余数初始为被除数减去除数; - 若符号不同,余数初始为被除数加上除数。 2. **商的确定**: - 余数与除数符号相同则商1,余数左移后减去除数; - 符号不同则商0,余数左移后加上除数[^2]。 3. **最后一位商恒置1**: - 补码除法末尾强制商为1,避免余数调整,简化流程。 4. **双符号位规则**: - 使用双符号位(如`00`表示正,`11`表示负)防止溢出,确保余数符号判断准确[^3]。 #### 三、原码补码除法的对比 | **特性** | **原码除法** | **补码除法** | |------------------|---------------------------|---------------------------| | 符号处理 | 符号位单独异或计算 | 符号参与运算,无需单独处理 | | 余数调整 | 可能需要恢复余数 | 末尾商置1,无需恢复余数 | | 应用场景 | 早期硬件或教学示例 | 现代计算机系统常用 |
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值