原码,补码的除法

目录

一.原码的除法

(1)恢复余数法

重点看这

(2)不恢复余数法(加减交替法)

重点看这

二. 补码除法运算

重点看这


我们已经学习了如何进行原码,补码的乘法:

http://t.csdnimg.cn/GjkIn

现在以同样的思路学习除法运算:

一.原码的除法

对于手算的10进制除法,我们是这样计算的

为什么这样计算呢,我们来看一下:

第一步得到的余数为0.2110,我们需要拼凑上小于等于这个数,且最接近这个数的值,即

0.985*0.2=0.1970,接下来继续以这个规则拼凑

0.985*0.01=0.00985

0.985*0.004=0.00394

最后得到商就是0.214

 那么同理,2进制的手算除法

计算机如何实现除法:

运算器结构如下:

ACC:累加器,用于存放操作数,或运算结果
MQ:乘商寄存器,在乘、除运算时,用于存放操作数或运算结果
X:通用的操作数寄存器,用于存放操作数

ALU:算术逻辑单元,通过内部复杂的电路实现算数运算、逻辑运算

ACC用于存储被除数、余数,MQ用于存储,X用于存储除数

(1)恢复余数法

实现方法:上商0/1,得到余数,余数末尾补0

符号位单独处理:符号位=x_{s}\bigoplus x_{y}

数值位取绝对值进行除法计算:

设机器字长为5位(含1位符号位,n=4),X=0.1011,y=0.1101,采用原码恢复余数法求x/y

|x|=0.1011,|y|=0.1101,[|y|]补=0.1101,[-|y|]补=1.0011

这里注意计算机会默认上商1

 

手算时,每一位商取0/1 是通过判断当前余数和除数的大小确定的:

那么计算机就会将ACC(余数)-通用寄存器(除数)--->ACC

将余数-除数,就是将余数+除数的负值的补码([-|y|]补),因为计算机中没有减法电路,所有减法都是通过补码的加法等价实现的,这里的加法是通过ALU中的加法电路实现的,不太理解可以先看:

http://t.csdnimg.cn/ZZybo

1.(ACC)+[-|y|]补-->ACC=01011+10011=11110

这里相减的结果是负数,所以说明被除数比除数更小,所以应该上商0,计算机检测到符号位为1,所以将MQ上商0

2.因为商0,而不是商1,所以保存在ACC中的数值是错误的,也就是说

不应该为(ACC)+[-[y]]补-->ACC,而是(ACC)-0-->ACC,为了恢复原来的数,我们再加上[|y|]补,就是

(ACC)+[|y|]补--->ACC

11110+01101=01011

恢复原来的ACC值,并且上商0

3.将ACC与MQ的数统一进行逻辑左移,MQ的最高位会移动到ACC的最低位,原本的ACC最高位被丢弃,低位补0

4.同理,右移后MQ还是会默认上商1:(ACC)-(除数)--->ACC

(ACC)+[-|y|]补--->ACC

  10110+10011=01001

此时计算机识别当前符号位为正,那么这一步商1是对的

不需要恢复余数,直接进行左移

同理如此重复,可以得到5位商:0.1101

而最终得到的余数需要在0.0111的基础上*2^{-n}(这里的n就是数值位的个数,在这里就是4)

这一步注意,最后一步上商1,若余数为负也就是红色字体为1,那么也需要进行恢复余数并商0

5.最后符号位0\bigoplus0=0

重点看这

以上是恢复余数法的所有过程:

1.默认商1,+[-|y|]补

2.余数为负,改为商0,并恢复余数(+[|y|]补),再进行左移

3.余数为正,直接商1,不用恢复余数,直接左移

4.最后的商位数为n+1(数值位+符号位),即上商n+1次,左移n次(最后一次上商不左移)

注:最后一步上商1,若余数为负也就是红色字体为1,那么也需要进行恢复余数并商0

5.异或判断符号位的正负

(2)不恢复余数法(加减交替法)

我们可以观察恢复余数这几部,当发现余数为负时,需要加上[|y|]补恢复余数,在进行左移,减去余数([-|y|]补),才能得到下一步的商,根据算式,就是将a--->2a+b的过程:也就是将余数左移一位(2a)+除数的绝对值(b)

所以得到不恢复余数法

重点看这

1.默认商1

2.若余数为负则可直接商0,让余数左移1位再加上|除数|(+[|y|]补),得到下一个新余数

3.若余数为正,则商1,让余数左移1位再减去|除数| (+[-|y|]补),得到下一个新余数

4.最后的商位数为n+1(数值位+符号位)

注:加/减n+1次,每次加减确定一位商;左移n次(最后一次加减完不移位)

最终可能还要再多一次加,这需要看余数的正负,下面有讲(所以加/减可能是n+1次,n+2次)

5.异或判断符号位的正负

余数的正负性与商相同,若最后一步得到的余数是一个负值,需商0,并且+[|y|]补得到正确的余数

:这一篇讲的是定点小数的除法运算,被除数一定要小于除数,若被除数大于除数,最后商会为:1.几,而定点小数无法表示大于1的范围,那么机器就是通过第一步得到的商判断的:

第一步被除数-除数,一定为负,商要从默认的1,改为0,若第一步的商不为0,那么就会直接停止除法运算

二. 补码除法运算

补码的除法运算与原码的除法运算中的加减交替法有很多相似

原码中的加减交替法与补码的除法运算的区别:

1.补码除法中,符号位会参与运算

2.被除数/余数,除数都会采用双符号位

3.这里的除数不是原码中的|除数|的补码,而是除数的补码,因为符号位也会参与运算

4.在原码加减交替法中,第一步一定是-|除数|,而在补码的加减交替法中,是根据被除数与除数是否同号来判断+[y]补或+[-y]补

第一步:

被除数和除数同号,则被除数减去除数;

异号则被除数加上除数

接下来的每一步:
余数和除数同号,商1,余数左移一位减去除数;

余数和除数异号,商0,余数左移一位加上除数。

重复n次

设机器字长为5位(含1位符号位,n=4),x=+0.1000,y=-0.1011,采用补码加减交替除法求x/y

例如00.1000与11.0101,异号加上除数,得到11.1101,接下来看余数和除数,余数为11.1101,除数为11.0101,同号,商1,余数左移一位并且减除数。如此重复n次(n为数值位的个数)

注意:

在补码中,最后一步是异号的,应该商0,但是在补码加减交替法中,末尾商恒置1,这样做精度误差不超过2^{-n}

而在原码中,若最后一步得到的余数是一个负值,需商0,并且+[|y|]补得到正确的余数

重点看这

1.第一步:被除数和除数同号,则被除数减去除数;异号则被除数加上除数

接下来的每一步:
余数和除数同号,商1,余数左移一位减去除数;

余数和除数异号,商0,余数左移一位加上除数。

2.最后商位数为n+1(数值位+符号位),加/减次数n+1,左移次数为n

3.末位恒置1

总结:

原码加减交替法与补码加减交替法的区别:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/637089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RibbonGroup 添加QAction下拉带Menu

实现代码如下所示: { QMenu* pMenu new QMenu(this); pMenu->addAction(QIcon(":/QRibbonDemo/res/smallpaste.png"), tr("Menu1")); pMenu->addAction(QIcon(":/QRibbonDemo/res…

Django随笔

关于Django的admin 1. 在url中把 from django.contrib import admin 重新解开 把path(admin/,admin.site.urls), 解开 2. 注册app,在配置文件中写 django.contrib.admin, 3.输入命令进行数据库迁移 Django国际化 配置文件中(改成中文) LA…

SPI 动态服务发现机制

SPI(Service Provier Interface)是一种服务发现机制,通过ClassPath下的META—INF/services文件查找文件,自动加载文件中定义的类,再调用forName加载; spi可以很灵活的让接口和实现分离, 让API提…

Spring Boot整合Redis的高效数据缓存实践

引言 在现代Web应用开发中,数据缓存是提高系统性能和响应速度的关键。Redis作为一种高性能的缓存和数据存储解决方案,被广泛应用于各种场景。本文将研究如何使用Spring Boot整合Redis,通过这个强大的缓存工具提高应用的性能和可伸缩性。 整合…

Pyro —— 简介

目录 Differences between legacy and sparse pyro Getting started with pyro using shelf tools Related pyro nodes Sourcing DOP simulation SOP simulation Post-Processing Rendering Simple FX shelf tools Pyro为Houdini的体积流体(volumetric flu…

c++函数重载(同名函数)功能,区别于c语言

c可以使用同名函数,实现功能类似的多个功能 规则: ①函数名相同,但是函数的参数(形参)绝不相同 ②参数个数不同 ③参数个数相同,参数类型不同 只有返回值类型不同,不可以;只有形…

力扣hot100 找到字符串中所有字母异位词 滑动窗口 双指针 一题双解

Problem: 438. 找到字符串中所有字母异位词 文章目录 思路滑动窗口 数组滑动窗口 双指针 思路 👩‍🏫 参考题解 滑动窗口 数组 ⏰ 时间复杂度: O ( n ) O(n) O(n) 🌎 空间复杂度: O ( 1 ) O(1) O(1) class Solution { // 滑动窗口 …

VM使用教程--SDK取图 视频笔记

本笔记均由海康机器人官网的V学院视频中记录所得,属于省流大师了[doge] 图像采集 图像采集包括1图像源,2多图采集,3输出图像,4缓存图像,5光源 1图像源 图像源包括本地图像,相机采图,SDK 本…

【JSON2WEB】01 WEB管理信息系统架构设计

WEB管理信息系统分三层设计,分别为DataBase数据库、REST2SQL后端、JSON2WEB前端,三层都可以单独部署。 1 DataBase数据库 数据库根据需要选型即可,不需要自己设计开发,一般管理信息系统都选关系数据库,比如Oracle、…

设计模式--组合模式

缘起 某日,小明公司最近接到一个办公管理系统的项目,并且在每个城市都有分部。这属于是很常见的OA系统,只要前期将需求分析完善好,中后期开发维护是不难的。 然而,总部公司使用后觉得很OK,想要其他城市的…

【日常聊聊】自然语言处理的发展

🍎个人博客:个人主页 🏆个人专栏: 日常聊聊 ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 技术进步 应用场景 挑战与前景 伦理和社会影响 实践经验 结语 我的其他博客 前言 自然语言处理(NLP&#xf…

PLC物联网网关BL104实现PLC协议转MQTT、OPC UA、Modbus TCP

随着物联网技术的迅猛发展,人们深刻认识到在智能化生产和生活中,实时、可靠、安全的数据传输至关重要。在此背景下,高性能的物联网数据传输解决方案——协议转换网关应运而生,广泛应用于工业自动化和数字化工厂应用环境中。 无缝衔…

IGBT工作原理

IGBT(绝缘栅双极型晶体管) 在实际应用中最流行和最常见的电子元器件是双极结型晶体管 BJT 和 MOS管。 IGBT实物图电路符号图 你可以把 IGBT 看作 BJT 和 MOS 管的融合体,IGBT具有 BJT 的输入特性和 MOS 管的输出特性。 与 BJT 或 MOS管相比,…

如何探究大模型理论?UCLA最新《深度学习统计理论》综述,详述近似、训练动力学和生成模型

在这篇文章中,我们从三个角度回顾了神经网络的统计理论文献。在第一部分中,我们回顾了非参数框架下关于神经网络的过度风险(excess risks)的研究成果,这些成果适用于回归或分类。这些结果依赖于神经网络的显式构造&…

Spring Boot 3.2.2整合MyBatis-Plus 3.5.5依赖不兼容问题

问题演示 导依赖 当你启动项目就会 抛出该异常 java.lang.IllegalArgumentException: Invalid value type for attribute factoryBeanObjectType: java.lang.String 问题原因 mybatis-plus 中 mybatis 的整合包版本不够导致的 解决方案 排除掉mybatis-plus 中 mybatis 的整合…

Cortex-M3/M4内核中断及HAL库函数详解(1):中断相关寄存器

0 工具准备 Keil uVision5 Cortex M3权威指南(中文) Cortex M3与M4权威指南 stm32f407的HAL库工程 STM32F4xx中文参考手册 1 NVIC相关寄存器介绍 在Cortex-M3/M4内核上搭载了一个异常响应系统,支持为数众多的系统异常和外部中断。其中&#…

C - Monotonically Increasing

很妙的dfs&#xff1a;记录层数以及前一个数是多少。 代码&#xff1a; int ans[11]; int n,m;void dfs(int u,int pre){if(un1){for(int i1;i<n;i)cout<<ans[i]<< ;cout<<endl;return;}for(int ipre1;i(n-u)<m;i){ans[u]i;dfs(u1,i);} }void solve(…

Linux问题 apt-get install时 无法解析域名“cn.archive.ubuntu.com”

问题描述: 在安装程序时会出现无法解析域名的错误 解决办法: 1、编辑文件 sudo vim /etc/resolv.conf 2、在最后加上(按键 i 进入编辑模式) nameserver 8.8.8.8 3、保存退出(:wq)

Upload靶场通关教程(旧版20关)

文件上传类型&#xff1a; 前端验证&#xff1a;1 MIME类型验证&#xff1a;2 黑名单验证&#xff1a;3~10&#xff0c;19 大小写绕过、空格绕过、解析后缀数字绕过、点绕过、/绕过、::$DATA绕过 白名单验证&#xff1a;11~18&#xff0c;20 %00截断、二次渲染、文件包含、…

力扣每日一练(24-1-20)

大脑里的第一想法是排列组合&#xff0c;直接给出超级准确的最优解。 但不适用&#xff0c;hhh 只要连续的n个元素大于或者等于target就可以了 题目比自己想象的要好解决 解法是使用滑动窗口算法。这个算法的基本思想是维护一个窗口&#xff0c;使得窗口内的元素总和大于等于目…