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

26考研 | 王道 | 计算机组成原理 | 二、数据的表示和运算

26考研 | 王道 | 计算机组成原理 | 二、数据的表示和运算

在这里插入图片描述

文章目录

  • 26考研 | 王道 | 计算机组成原理 | 二、数据的表示和运算
    • 1 数制与编码
      • 1.1 进位计数制
      • 1.2 定点数的编码表示
      • 1.3 各种码的作用
      • 1.4 C语言中的整数类型以及强制转换
      • 1.5 零扩展&符号扩展
    • 2.2 运算方法和运算电路
      • 2.0 数字电路基础
        • 2.0.1 逻辑门电路
        • 2.0.2 多路选择器、三态门
      • 2.1 加法器
        • 1. 串行进位的加法器
        • 2.并行进位加法器(非重点)
        • 3.带标志位的加法器
      • 2.2 算术逻辑单元ALU
      • 2.3 定点数的移位运算
      • 2.4 定点数的加减运算
      • 2.5 无符号数的加减运算
      • 2.6 补码加减运算电路
      • 2.7 无符号整数的乘法运算原理
      • 2.8 带符号整数的乘法运算原理
      • 2.9 计算机实现乘法运算的三种方式
      • 2.10 无符号整数的除法运算原理
    • 2.3 浮点数的表示与运算
      • 2.3.1 浮点数的表示
        • 1.从科学计数法理解浮点数
        • 2.float单精度和double双精度浮点型的存储
        • 3.IEEE 754浮点数的表示(例题训练)
        • 4.IEEE 754浮点数 表示范围&几种特殊状态
          • 上溢
          • 下溢
      • 2.3.3 浮点数的运算
      • 2.3.4 数据的大小端和对齐存储
    • 重点:

1 数制与编码

1.1 进位计数制

image-20250530103901075

image-20250530102418765

任意进制转换成十进制

在这里插入图片描述

二进制<=>八进制、十六进制

在这里插入图片描述

各种进制的常见书写方式

在这里插入图片描述

十进制转换成任意进制

整数部分使用短除法得到

image-20250530102935873

小数部分

乘到小数部分为0就停止,不为0就一直乘,如果发现循环,说明没办法正好表示这个数字

到K-5的时候又变回了0.6,说明二进制没办法正好表示0.3

在这里插入图片描述

在这里插入图片描述

真值和机器数
在这里插入图片描述

1.2 定点数的编码表示

image-20250530111527042

无符号数的表示

主存地址是无符号数,不是补码原码之类的,因为主存地址没有负数,所以不需要有符号数来表示

image-20250530104351816

C语言中的无符号整数:

unsigned short a=1; //无符号整数 (短整型 2B)
unsigned int b=2; //无符号整数 (整型 4B)
//而用unsigned定义 float之类的浮点数会报错的

有符号数的定点表示

image-20250530104647800

原码

image-20250530105107002

image-20250530105246963

原码整数表示范围减去1就是因为正0和负0是一个数但是却又两种表示方式

反码

正数的反码和原码相同

负数的反码就是符号位不变,其余位取反

正0和负0的反码不是一个值

image-20250530105706447

补码

正0和负0是一个表示方式,那么表示方式就会比原码多一个,所以补码整数和补码小数的表示范围也会比原码多一个表示方式,就是多出来的-2n和-1

image-20250530110831235

移码

x移是一个无符号数,要求真值x,就是把移码的无符号数值减去偏置,结果是正的就是正的,是负的就是负的,可以去看课后题 24题

image-20250627162418551

image-20250530110956673

常用

image-20250530111121342

image-20250530111452451

1.3 各种码的作用

**补码:**用加法运算代替减法运算而结果仍是正确的结果

这是因为机器字长如果是8bit的话,那么天然就会对28=256进行取余操作,因为只会保留低位,所以用补码,也就是补数进行加法

这样可以只设计加法电路而不设计减法电路,降低成本

image-20250530111849574

image-20250530112423957

image-20250530112714454

image-20250530113504110

移码:移码和真值的增大方向是一致的,所以会用来比较真值的大小。即移码大小就是真值大小,即看谁的移码中先出现1谁就大。符号位也要参与比较

image-20250530113537913

1.4 C语言中的整数类型以及强制转换

image-20250530115213216

1.无符号数和有符号数的转变就是把符号位当成数值位来计算真值

2.长整数变短整数就是高位截断,然后看你新的类型是有符号数还是无符号数,有符号数就把最高位当做符号位

3.短整数变长整数

如果是负数的话,存储是补码形式,那就要在符号位于最高位之间加1,补足长整数的位数

如果是无符号数的话,就是高位补0

1.5 零扩展&符号扩展

image-20250530122532034

image-20250530122718071

2.2 运算方法和运算电路

2.0 数字电路基础

2.0.1 逻辑门电路

image-20250530161006090

image-20250530161033447

image-20250530161102435

image-20250530161215215

image-20250530161258732

2.0.2 多路选择器、三态门

image-20250530161431585

image-20250530161443230

高阻态既不是低电平的0,也不是高电平的1

image-20250530161552491

image-20250530161652714

image-20250530161823796

2.1 加法器

image-20250530163651481

1. 串行进位的加法器

image-20250530162052497

左边获得Si,右边获得Ci,两者合并得到最后的完整电路,即下图所示

image-20250530162204246

image-20250530162302117

串行进位的加法器的不足之处

image-20250530162417406

2.并行进位加法器(非重点)

不需要知道内部构造,只需要知道加法器的逻辑功能即可

image-20250530162646838

3.带标志位的加法器

image-20250530162943372

image-20250530163516457

2.2 算术逻辑单元ALU

image-20250530164612333

image-20250530164027219

ALU的功能

直送的意思是 数据进来的是什么出去的就是什么,不对数据进行任何处理

image-20250530164152994

image-20250530164359922

image-20250530164521735

2.3 定点数的移位运算

image-20250531161015310

如果算数移位前的最高位和算数移位后的最高位不同(异或为1),说明发生了溢出。其实就是乘了2以后,正的变负的,负的变正的了,那肯定是溢出了

逻辑移位

image-20250531160338258

image-20250531160436402

算数移位:

image-20250531160601214

image-20250531160840426

image-20250531160958527

注:定点小数算数移位同理。

反码的算术移位

在这里插入图片描述
补码的算术移位

在这里插入图片描述
总结

在这里插入图片描述
在这里插入图片描述

逻辑移位(无符号数算术移位)

在这里插入图片描述
在这里插入图片描述

循环移位在这里插入图片描述

2.4 定点数的加减运算

image-20250531164716306

image-20250531162000725

image-20250531163500756

image-20250531164018512

image-20250531164315991

image-20250531164537471

方法三的结果中的双符号位,第一位是本来应该的结果是正的还是负的,第二位是实际结果是正的还是负的

比如 01,那就是本来应该是正的结果是负的,那就是上溢了

两个正数相加产生的溢出是01,两个负数相加的溢出是10

image-20250531164913622

image-20250531164936503

2.5 无符号数的加减运算

image-20250531165738971

image-20250531165019332

image-20250531165240327

image-20250531165800262

image-20250531165523579

image-20250531165645502

2.6 补码加减运算电路

image-20250531170113408

image-20250531170149899

image-20250531170601741

image-20250531170634393

image-20250531170648934

image-20250531170713463

2.7 无符号整数的乘法运算原理

image-20250531171520658

image-20250531220746550

image-20250531171750414

image-20250531210858755

image-20250531215442835

image-20250531220239677

image-20250531220300177

image-20250531220319758

image-20250531220342765

image-20250531220600202

Cn为乘数的位数,在上图就是32

2.8 带符号整数的乘法运算原理

image-20250531223318391

image-20250531221248140

image-20250531221443680

只需要知道工作流程, 不要深究为什么,只要知道怎么做就行了

image-20250531221707579

右移过后空出来的这个最高位要填补的数和原来的乘积寄存器里面的最高位也就是符号位相同

image-20250531222240685

image-20250531222643023

无符号整数的加减法用CF

无符号整数的乘法有没有溢出用的是OF(程序员常用OF来判断),当然如果溢出的话,这个时候CF也会被置为1

image-20250531223119814

image-20250531223304848

image-20250531223431817

2.9 计算机实现乘法运算的三种方式

image-20250601145438711

image-20250601144626982

除非是全0,否则一定需要n个时钟来完成乘法

这个改进方案的思路很常见,我们只需要知道有这么个东西就行,具体怎么改怎么运行的不需要了解

image-20250601144925673

image-20250601145118985

用软件进行逻辑上的等效会比硬件慢得多

image-20250601145410301

2.10 无符号整数的除法运算原理

image-20250601145607931

image-20250601152229908

image-20250601150247751

image-20250601150525673

image-20250601151445793

视频中的例子是恢复余数法,对应的还有不恢复余数法,可以先等把简单的学完了再去了解不恢复余数法和恢复余数法。

恢复余数法是指,每次要判断R-Y的值大于0还是小于0,但其实会把R-Y的值存在R中,如果说我们上了商1,那说明R中就该放R-Y的值,那就不需要去恢复到原来R的值,如果我们上了商0,那说明R不够减,不应该把R-Y放到R中,那就要回复R的值,具体就是控制逻辑计数器发出加法信号,再把Y加一遍给加回去

image-20250601151504286

image-20250601152006095

2.3 浮点数的表示与运算

2.3.1 浮点数的表示

image-20250924202454102

image-20250924194813798

image-20250924194937139

定点数的局限性:定点数可表示的数字范围有限,但我们不能无限制的增加数据的长度。

1.从科学计数法理解浮点数

image-20250924195508524

image-20250924195628664

浮点数的表示

image-20250924195854529

2.float单精度和double双精度浮点型的存储

image-20250924201129711

image-20250924201444123

偏置记忆:偏置为2n-1-1,n为阶码位数

3.IEEE 754浮点数的表示(例题训练)

image-20250924201745332

image-20250924201931152

image-20250924202029134

image-20250924202121189

image-20250924202259111

image-20250924202440804

4.IEEE 754浮点数 表示范围&几种特殊状态

image-20250924205524063

image-20250924202958935

image-20250924203150193

image-20250924203513601

image-20250924203828178

image-20250924203937370

上溢

image-20250924204247071

image-20250924205844186

image-20250924204306141

下溢

image-20250924204800947

1.下溢到0才是下溢异常,下溢到非规格化浮点数并不是异常

2.非规格化正数的最大值就是正下溢和规格化浮点数的边界,就是2-126-2-149

最小值就是负下溢和规格化浮点数的边界,就是-(2-126-2-149),就是加了个负号

image-20250924205758296

double的在末尾

image-20250924204713187

image-20250924204938161

image-20250924205228223

image-20250924205417273

image-20250924205442561

image-20250924205651132

image-20250924205717774

2.3.3 浮点数的运算

在这里插入图片描述

浮点数的加减运算

image-20250924212641105

image-20251001203128771

image-20251001203224484

image-20251001203056279

image-20250924212821215

在这里插入图片描述

在这里插入图片描述
X=-0.101×2^(-101)
-0.101: 补码:1.011 双符号位补码:11.011 扩展:11.011000000
2^(-101): 补码:1011 双符号位补码:11011

浮点数的加减运算-舍入

在这里插入图片描述
强制类型转换

在这里插入图片描述

2.3.4 数据的大小端和对齐存储

image-20250601152826882

大端就是高位存在低地址,低位存在高地址(最高有效字节存在最低的地址)

小端就是高位存在高地址,低位存在低地址(最高有效字节存在最高的地址)

image-20250601153255603

重点:

1.通常用来表示主存地址的是无符号数

image-20250923194045715

对于CF的理解:加法器不管你送进来的x和y是有符号还是无符号,算CF等于0还是1的时候,x,y都当成无符号数,加法就看溢不溢出,减法就看够不够减

无符号整数加减是否溢出看CF,无符号整数乘除是否溢出看OF

3.减法直接看够不够减也可以

image-20250923194615686

4.image-20250923194722106

image-20250923194738655

5.存储模4补码仅需一个符号位,因为任何一个正确的数值,模4补码的两个符号位总是相同的

6.注意课后题21,对于减法来说,加法电路是(假设是x-y)先把y给取反然后送入加法器,取反之后的+1操作是留给 sub位来进行的,会给sub位传个1

  1. 补码表示的规格化尾数形式,它的最高位和符号位一定是相反的,正数是01xxx,负数是10xxx

image-20251001164442919

P65页第23题:补码规格化的表示是小数点后一位与符号位不同

1.110001这种形式的话,小数点前面是符号位,后面才是尾数

注:这里提到的规格化和IEEE754规格化不同

8.基数不为2而是2的倍数时:

image-20251001165000790

尾数的最高n位不全为0:基数为8,那么尾数最高三位不能为0

可以看看:理解原码规格化浮点数中,当基数为4时为何要求尾数最高两位不能全为0,关键在于明白基数(r)如何影响规格化的定义和数值的精度

为了更直观地理解不同基数下的规格化要求,可以参考下表:

基数 ®基数形式规格化要求 (原码表示)规格化操作 (每移动一次)规格化尾数绝对值范围
221最高位为1尾数移1位,阶码±1[21,1)
422最高两位不全为0尾数移2位,阶码±1[41,1)
823最高三位不全为0尾数移3位,阶码±1[81,1)

核心原因:保证精度和唯一性

规格化的核心目的是为了确保尾数的有效数字部分占据最高位,从而在给定的位数下获得最高的表示精度。基数 r=4=22意味着阶码每变化1,实际数值相当于乘以或除以4(即移动2个二进制位)

因此,为了确保尾数数值部分的最高有效位得到充分利用,规格化要求最高两位不能同时为0。如果最高两位全为0,例如 0.001101...,其数值绝对值小于 1/4,可以通过左移两位(尾数乘以4)同时阶码减1的方式来将其转换为更高精度的表示形式 0.110100...

权衡:范围与精度

提高基数(如从2提升到4)可以扩大浮点数的表示范围,因为阶码的每一次变化都会带来更大的数值跳跃。然而,这也会导致相邻可表示数值之间的间隔(精度)变大。为了保证在较大基数下仍能维持一定的精度,就必须确保尾数本身足够“大”,即其有效数字从高位开始。要求最高两位不全为0,正是为了在范围和精度之间取得一个平衡。

总结

总而言之,对于基数为4的原码规格化浮点数,规定尾数最高两位不能全为0,是为了:

  1. 确保精度:充分利用尾数的每一位,保证数值表示的精确度。
  2. 保持表示的唯一性:避免同一个数值有多种不同的表示形式。
  3. 平衡范围与精度:在扩大数值表示范围的同时,通过规格化约束来维持必要的精度。

9.长度相同但前者阶码长,尾数短,后者阶码短,尾数长。那么前者可以表示的数的范围大,但精度低

长度,阶码,尾数都相同,前者基数大,后者基数小,那么前者可以表示的数的范围大,但精度低

10.与非规格化浮点数相比,采用规格化浮点数的目的主要是为了增加数据表示的精度(假设有一个数是0.000000000000000001,与其花很多bit存储0,不如花少量bit存储多少个0)

11.舍入是浮点数的概念,定点数没有舍入这个概念。浮点数舍入有两种情况:对阶和右规格化

舍入不一定产生误差,如向下舍入11.00到11.0时没有误差

12.不是IEEE754的浮点数规格化后小数点后面的最高位是1就行

13.浮点数溢出看的是阶码而不是尾数,阶码溢出才会让浮点数溢出

14.IEEE 754的非规格化的阶码 的 float偏置是固定126而不是127

double的是1022而不是1023

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

相关文章:

  • 上海网站推河北关键词排名推广
  • 游戏代练经济矩阵计算器
  • K8s学习笔记(十一) service
  • 【MCU】【STM32】基于STM32CubeMX+CLion的STM32开发环境
  • 十堰市住房和城乡建设厅官方网站王野天天
  • 【机器人】SG-Nav 分层思维链H-CoT | 在线分层3D场景图 | 目标导航
  • 全面保护隐私的开源个人知识管理工具——SiYuan
  • html5网站开发参考文献无锡网站制作哪家值得信赖
  • python简易程序跑NLPIR模型
  • GPIO 子系统和 pinctrl 子系统
  • 站酷网首页wordpress内容页显示tag
  • linux下的进程间和线程间通信
  • 网站小图片素材商务网站大全
  • Java 集合 “Map(1)”面试清单(含超通俗生活案例与深度理解)
  • 哔哩哔哩国际版分享 | 白色版 ,蓝色概念版
  • 《P2758 编辑距离》
  • unserialize反序列化漏洞
  • 美工网站设计收费网站中的动态统计图如何做
  • LabVIEW谐波失真分析
  • 秦皇岛市网站制作公司民宿可以在哪些网站做推广
  • 【C++】异常介绍:高级应用与性能优化
  • 大气的网站首页重庆网站建设公司的网站
  • 独立开发者日常:Java大模型流式输出教程
  • 汽车信息安全基石:SHE(安全硬件扩展)深度解析
  • 2025年大模型服务性能深度解析:从清华评测报告看蓝耘元生代MaaS平台的综合实力
  • 网站是哪个公司做的WordPress的网外无法访问
  • 从0死磕全栈之Next.js 流式渲染(Streaming)实战:实现渐进式加载页面,提升用户体验
  • 自己如何创建网站深圳 网站制作
  • 【双指针专题】之复写零
  • 英语学习-Saints039