当前位置: 首页 > news >正文

考研复习-计算机组成原理-第二章-数据的表示和运算

本文章仅作王道408书上没有的内容的补充

带符号整数的乘法

均使用补码表示乘数和被乘数

示例

一开始先将乘数和辅助位放入

控制逻辑根据Y中的最后两位判断行事逻辑

操作逻辑表如作图所示

第一轮一开始是00,所以什么也不加,让寄存器保持原样

然后右移寄存器,高位补符号位,低位溢出舍弃

cn-1=4-1=3

第二趟

此时我们发现指令是10

对应的操作是-x补

那么如右上所示

p-x补

可以等价为

p+[-x]补

即按位取反+1

得到结果写入乘积寄存器

然后算数右移

第三轮由于是11信号

直接右移即可

第四轮是+补码

1101写入p中

第五轮右移

然后前面补充符号位

此时cn=0,不再有后续

溢出判断

其中cf常用于判断无符号加法,所以对于乘法我们依旧使用of进行判断

也可以直接使用手算的方式,补码范围我们已经知道

那么我们直接人工算出乘积后在范围内进行判断

常见乘法运算电路

可以一次性对两位数进行运算

缩短时钟周期为原来的一半

阵列乘法器

软件逻辑实现乘法

总结

除法电路(难点)

手算无符号整数除法

除法运算电路实例

1.初始时,先将除数和被除数放入对应电路的位置

若被除数不足寄存器位数,则进行零扩展

如图所示

以及初始的异常检查

第一趟处理

注意,,因为商寄存器最终只能够保存n为商,而我们手算的过程中我们可以发现我们会得到n+1位的商,所以我们需要将第一位商进行舍弃。

所以在运算过程中,我们需要对第一位进行一次判断,判断是否为1,如果为1则发生溢出,停止除法运算

为0则继续

而如何上商的规则,我们手算很好判断,那么对于计算机来说,我们判断的标准是,判断R-Y的值是否>=0如果≥那么我们直接上1,代表着被除数此时现在能够上商

如果不等,那么则直接上0

如图所示第一轮时,我们判断0000-0010小于0,则我们直接上0,此时R中存放的是R-Y

并非我们下一个需要进行计算的数,我们需要再进行一次+Y保持原样

除了第一轮之外,其余轮数的处理如上图下方所示的三种,其中左移是必要的

先进行左移

第二轮

然后此时判断R中的值是否>=y

我们发现0001小于y所以

此时末尾的空缺位置上0

第三轮

开始时先进行左移运算

得到如图所示的结果

此时我们判断R-Y是否>=0

发现此时R>=Y

所以此时我们应该上商1

即末尾补1

再将运算结果即0011-除数0010

得到的0001写入寄存器当中

如图所示

第三趟结束

第四轮如图所示

运算完毕之后的值 

第五轮

除法运算结束此时cn=0(注意cn依旧=4,只是第一轮不进行cn--)

此时R中保存的就是正确的余数

商寄存器为正确的商

其中我们发现,每一轮运算中我们都需要进行R-Y的运算,将其运算结果放入余数寄存器R中

如果大于0则上商1,并将运算结果保留在R中

如果小于0则上商0,此时R中的R-Y是负数,是错误的,因为我们实际上是减去的0000,那么我们需要将错误减去的Y重新加回去复原R

这种做法叫做恢复余数法。

重点理解

        

对于做题

如果出题人让我们计算商和余数分别是多少

我们可以先进行十进制的运算

然后把他转化为32位的无符号整数即可

余数和商都是这样

其中关于商溢出的判断也是如此,我们可以先进行十进制的算法

然后再根据商的最大表示范围判断商是否大于范围

因为4位÷4位最多就是4位商,不怕溢出

浮点数

主要主义的是单双精度的浮点数的表示方法

注意阶码的偏置值,用阶码-偏置值即可得到阶码的真值

规格化浮点数及其真值表示范围

当为非IEEE 754标准的浮点数规格化,其本质就代表着尾数的最高位次为一个有效数位,不能再进行移动

比如以2为基数的规格化数

0.1111

这样的数字,其尾数的最高位为1,那么其为有效数位,在这种情况下,你往左移动一位,会溢出,往右移一位,会使得最高位不是有效位

那么这样的数被称为规格化

那么如果以4为基数的规格化数

其阶码加一,那么就代表着尾数需要移动两位才能抹平差距

所以,基数为4的规格化数进行左右规的时候,一次性需要移动两位数字

所以对于基数为4的规格化数

其规格化表现为

0.xx 1010100

xx处不为0,即一次左规会导致溢出,然后一次右规又会导致最高位无效,其尾数部分最高有效位为开头的两位数

若基数为8则是开头前三位不为0即可

十进制表示法如图所示推导

特殊浮点数

非规格化浮点数的表示及其范围

负数只需要添加负号即可

浮点数表示范围总结

错题

答案:D

对阶操作中,浮点数的格式都是相同的,所以不会发生溢出

尾数舍入时,如右图所示,假定25位尾数舍入一个1然后进一,导致一直进位,然后需要右规,所以阶码变大可能上溢

尾数溢出时,我们只需要调整阶码即可

答案:B

这种类型的题目关键在于判断精度的转化是难点

比如int 型数据能够表示31位的数

float只能表示到24位

如图所示,如果int 表示了31位数的1

那么转换为浮点数,其规格化之后尾数部分有30个1此时尾数部分超出所以要舍弃则精度丢失

对于Ⅳ选项他有如下过程,列出两个数的数值大小,我们发现如果要进行计算那么f会进行强制类型转换然后进行对阶运算,其中发现阶码需要变大大约210,那么尾数需要右移210位,而double类型的尾数只能够表示53位所以f相当于后面的都被舍弃变成了0,这种现象叫做大数吃小数

答案:D

解题步骤

A的尾数部分为 \frac{1}{2}+\frac{1}{4}+\frac{1}{8}+\frac{1}{32}=\frac{29}{32}

x: 00 111 00 11101

y:00 101 00 10100

此时发现y的阶码小于x

我们对y进行右规和阶码扩大

y: 00 111 00 00101

x: 00 111 00 11101

两者相加

得到00 111 01 00010

此时发现尾数部分符号位多出两位进行右规

同时阶码+1

得到 01 000 00 10001

此时我们发现阶码溢出

故选D

答案:D

c语言主要转型的机制如下

答案:B

可以根据下图所示的运算规则进行判断

但同时也可以直接用概念判断

cf表示无符号数是否溢出,所以我们直接将r1和r2进行无符号数相减判断是否溢出即可,r1>r2所以不会溢出cf=0

of代表有符号数是否溢出两个负数相减则肯定不会溢出

答案:A

cf代表无符号数的溢出

所以我们将-20进行无符号数的转换

int型32位二进制数

所以y=2^{32}-20

x-y一定溢出无符号整数范围

本章重要记忆点

浮点数补码表示法

浮点数采用补码表示其符号位和尾数首位一定相反

移位运算

算数移位运算:用于移动有符号数,符号位也跟着移动,左移补零,右移补符号位,若移动后符号位发生改变则溢出

逻辑移位运算:直接补零

补码表示范围

对于一个n位补码表示的范围为[-2的n-1次方,2的n-1次方-1]

加减运算器及其CF OF标志位的判断

http://www.dtcms.com/a/312976.html

相关文章:

  • PHP面向对象编程与数据库操作完全指南-下
  • 深入解析C++函数重载:从原理到实践
  • 2025年测绘程序设计比赛--基于统计滤波的点云去噪(已获国特)
  • MySQL梳理三:查询与优化
  • python新功能match case|:=|typing
  • Hertzbeat如何配置redis?保存在redis的数据是可读数据
  • 【MySQL安全】什么是SQL注入,怎么避免这种攻击:前端防护、后端orm框架、数据库白名单
  • Android设备认证体系深度解析:GMS/CTS/GTS/VTS/STS核心差异与认证逻辑
  • ELECTRICAL靶机复现练习笔记
  • Leetcode:1.两数之和
  • Java 大视界 -- Java 大数据机器学习模型在金融市场情绪分析与投资决策辅助中的应用(379)
  • ubuntu24.04安装selenium、edge、msedgedriver
  • 05.Redis 图形工具RDM
  • 前端开发(HTML,CSS,VUE,JS)从入门到精通!第四天(DOM编程和AJAX异步交互)
  • k8s+isulad 国产化技术栈云原生技术栈搭建1-VPC
  • 使用ACK Serverless容器化部署大语言模型FastChat
  • 如何在不停机的情况下,将MySQL单库的数据迁移到分库分表的架构上?
  • 【前端安全】聊聊 HTML 闭合优先级和浏览器解析顺序
  • [AI8051U入门第十五步]W5500实现DHCP自动获取IP
  • SpringBoot+Vue高校实验室预约管理系统 附带详细运行指导视频
  • Matlab算法编程示例4:数值解法求解常微分方程的代码实例
  • Python类与对象指南
  • java贪吃蛇小程序
  • 个人项目介绍:STM32F407核心多层电路板
  • Java试题-选择题(8)
  • 25 渗透测试培训课程第一部分 - 信息收集 内容概要
  • 江协科技STM32 14-1 WDG看门狗
  • Flask ORM 模型(轻松版)
  • 08.Redis 持久化
  • UniApp 实现顶部固定导航栏 Tab 及滚动变色效果