第二章:数据的表示和运算(408笔记|王道笔记|计算机组成原理笔记)

第一节:进位计数制

十进制转其他进制

整数部分:除基取余法

小数部分:乘基取整法

真值和机器数

真值

实际得带正负号的数值——人类习惯的数字

机器数

把正负号数字化得数——数字实际存储到机器里得样子

第二节:字符与字符串(几乎不考)

英文字符在计算机内的表示

ASCII码

  • 0—48;A—65;a—97
  • 通常用8bit表示一个字符,最高位都为0
  • 共128个字符,0~31,127为控制/通信字符,32~126为可印刷字符
  • 所有大写字母,小写字母,数字的编码都连续

中文字符在计算机内的表示

  • 区位码,国标码,汉字内码,输入编码,字形码
  • 国标码=区位码+2020H
  • 机内码=国标码+8080H

字符串的存储

  • 从低地址到高地址逐个字符存储,常采用‘\0’作为结尾标志
  • 对于多字节的数据(如汉字),可采取大/小端存储模式
  • 大端模式:将数据的最高有效字节存放在低地址单元中
  • 小端模式:将数据的最高有效字节存放在高地址单元中

第三节:校验码

校验

原理

码字

由若干位代码组成的一个字叫码字

码字间的距离

将两个码字逐位进行对比,具有不同的位的个数称为两个码字间的距离

码距

一种编码方案可能有若干个合法码字,各合法码字间的最小距离称为“码距

d=1时,无检错能力;当d=2时,有检错能力;当d3时,若设计合理,可能有检错、纠错能力

奇偶校验码

奇校验码

整个校验码(有效信息位和校验位)中“1”的个数为奇数,加上校验位后异或运算等于1

偶校验码

整个校验码(有效信息位和校验位)中“1”的个数为偶数,加上校验位后异或运算等于0

图示

例题

例题

给出两个编码1001101和1010111的奇校验码和偶校验码。设最高位为校验位,余7位是信息位,则对应的奇偶校验码为:

答案

偶校验的硬件实现:各信息进行异或2运算,得到的结果即为偶校验位

注意

偶校验:1010 —> 01010,能发现奇数位错误,但无法确定是哪一位出错

1个校验位只能携带2种状态信息(对/错)】

海明校验码

海明码设计思路

将信息位分组进行偶校验—> 多个校验位—>多个校验位标注出错位置

多个校验位能携带多种状态信息(对/错,错在哪)

需要多少个校验位

步骤

确定校验位数量→②确定校验位的分布→③求校验位的值→④检错纠错

补充:如果数据为从小到大,也是一样的,换了顺序而已

能力

海明码的检错,纠错能力纠错能力——1位,检错能力——2

存在问题

问题

海明码无法区分到底是1位错误,还是2位错误

例子

如果P1和P2发生错误,那么S1=1,S2=1,S3=0,所以等于011,那么是不是意味着3号位置的数据H3发生了错误,显然不是

解决

办法

需加上“全校验位”,对整体进行偶校验

循环冗余校验码(CRC码)

基本

思想

数据发送、接受方约定一个“除数”K个信息位+R个校验位作为“被除数”,添加校验位后需保证除法的余数为0收到数据后,进行除法检查余数是否为0若余数非0说明出错,则进行重传或纠错

如何

构造

如果出错的位数没有超过余数所能表示的范围,那么出错位于余数是相对应的

如何检错纠错

K个信息位,R个校验位,若生成多项式选择得当,且𝟐𝑹≥𝑲+𝑹+𝟏 ,CRC码可以纠正1位错【一般CRC用于计算机网络当中,一次传输几千个bit+几个校验位,所以通常只用来“检错”

第四节:定点数的表示

定点数

小数点的位置固定996.007——常规计数】

浮点数

小数点的位置不固定9.96007×102——科学计数法】

无符

号数

整个机器字长的全部二进制位均为数值位,没有符号位,相当于数的绝对值
【通常只有无符号整数,而没有无符号小数】

有符

号数

有符号数的定点表示

注:可用原码反码补码三种方式来表示定点整数定点小数。还可用移码表示定点整数

真值为x,则用[x]原[x]反[x]补[x]移表示真值所对应的原码反码补码移码

原码

概念

尾数(数值部分)表示真值的绝对值,符号位“0/1”对应“正/负”

原码

定点

整数

常写为:[x]原=1,0010011

若未指明机器字长,也可写为:[x]原=1, 10011

若机器字长n+1位,原码整数的表示范围:

−(𝟐n−1) ≤ x ≤ 𝟐n−1(关于原点对称)

真值0+0 -0 两种形式

原码

定点

小数

常写为:[x]原= 1.1100000
如:机器字长为8位

若机器字长n+1位,原码小数的表示范围:

−(1−𝟐−n) ≤ x ≤ 1−𝟐−𝒏(关于原点对称)

真值0+0 -0 两种形式

反码

概念

若符号位为0,则反码与原码相同若符号位为1,则数值位全部取反

【“反码”只是“原码”转为“补码”的一个中间状态,实际中并没什么卵用】

反码

定点

整数

若机器字长n+1位,反码整数的表示范围:

−(𝟐n−1) ≤ x ≤ 𝟐n−1(关于原点对称)

真值0有+0 -0 两种形式

反码
定点
小数

若机器字长n+1位,反码小数的表示范围:

−(1−𝟐−n) ≤ x ≤ 1−𝟐−n(关于原点对称)

真值0有+0 -0 两种形式

补码

概念

正数的补码=原码     负数的补码=反码末位+1(要考虑进位)

注意:补码的真值0只有一种表示形式
【将负数的补码转回原码的方法相同:尾数取反,末尾+1

补码
定点
整数

定点整数补码[x]补= 1,0000000表示x = -𝟐𝟕

若机器字长n+1位,补码整数的表示范围:

𝟐𝒏 x 𝟐𝒏1 比原码多表示一个𝟐𝒏 )

补码
定点
小数

定点小数补码[x]补= 1.0000000表示x = -1

若机器字长n+1位,补码小数的表示范围:

𝟐−𝐧 (比原码多表示一个1

技巧

原码补码后互换的技巧(负数),从数的右边往左开始数 ,遇到“0”不理它,直到遇到第一个“1”为止, 以后的每一位数取反即是它的原码或补码 ,符号位不变,还是“1” (补码的补码是原码)

②由[x]快速求[-x]的方法符号位数值位全部取反末位+1

移码

概念

移码在补码的基础上将符号位取反【注意:移码只能用于表示整数

移码
整数

若机器字长n+1位,移码整数的表示范围:

𝟐𝐧 ≤ x𝟐𝐧−1 (与补码相同)

作用

移码表示的整数很方便对比大小,因为抛开符号而言,随着真值增大移码增大
移码全0真值最小,移码全1真值最大

汇总

用几种码表示定点整数

原码反码的真值0两种表示

补码移码的真值0只有一种表示

补码移码可以多表示一个负数

例题

总结

第五节:原码,反码,补码,移码的作用

背景

用加法代替减法
如时钟的12小时的周期
10-3=7点
10+9=19mod12=7点,把减法转换成加法

补码的作用

使用补码可将减法操作转变为等价的加法,ALU中无需集成减法器。执行加法操作时,符号位一起参与运算

移码的作用

移码表示的整数很方便对比大小,因为抛开符号而言,随着真值增大移码增大移码全0真值最小,移码全1真值最大

第六节:定点数的运算(移位运算,加减运算,乘法运算,除法运算)

移位运算


算数

移位
 

概念

通过改变各个数码位和小数点的相对位置,从而改变各数码位的位权。可用移位运算实现乘法、除法

原码

概念

符号位保持不变,仅对数值进行移位

算数

右移

高位补0,低位舍弃。若舍弃的位=0,则相当于÷2;若舍弃的位≠0,则会丢失精度

算数

左移

低位补0,高位舍弃。若舍弃的位=0,则相当于×2;若舍弃的位≠0,则会出现严重误差

反码

正数

正数的反码与原码相同,因此对正数反码的移位运算也和原码相同

右移

高位补0,低位舍弃

左移

低位补0,高位舍弃

负数

负数的反码数值位与原码相反,因此负数反码的移位运算规则如下

右移

高位补1,低位舍弃

左移

低位补1,高位舍弃

补码

正数

正数的补码与原码相同,因此对正数补码的移位运算也和原码相同

右移

高位补0,低位舍弃

左移

低位补0,高位舍弃

负数

负数补码=反码末位+1导致反码最右边几个连续的1都因进位而变为0,直到进位碰到第一个0为止。规律——负数补码中,最右边的1及其右边同原码。最右边的1的左边同反码负数补码的算数移位规则如下:

右移(同反码)

高位补1,低位舍弃

左移(同原码)

低位补0,高位舍弃

汇总

左移相当于×2;右移相当于÷2

由于位数有限,因此有时候无法用算数移位精确地等效乘除法

应用
举例

逻辑

移位

概念

可以把逻辑移位看作是对“无符号数”的算数移位

逻辑右移

高位补0,低位舍弃。

逻辑左移

低位补0,高位舍弃。

应用

颜色RGB是根据R值,G值,B值拼凑出来的RGB值然后对应特定的颜色,那么已知这R,G,B三个值,如何拼凑出对应的RGB值

R = 102——01100110

G = 139——10001011

B = 139——10001011

循环

移位

概念

应用

例如汉字的存储,因为一个汉字占2B,有两种存储方式:大端存储(高低),小端存储(低高),所以如果这两种存储方式需要切换的时候,可以使用循环移位,来移动8bit

注意

由于原、反、补码位数有限,因此某些时候算数移位不能精确等效乘+法、除法

加减运算&溢出判断

原码的加减法

使用减法器运算,取绝对值

加法

正+正→绝对值做加法,结果为正。可能会溢出

负+负→绝对值做加法,结果为负。可能会溢出

正+负→绝对值大的减绝对值小的符号同绝对值大的数

负+正→绝对值大的减绝对值小的符号同绝对值大的数

减法

原码的减法运算,“减数”符号取反,转变为加法

正-负→正+正

负-正→负+负

正-正→正+负

负-负→负+正

补码的加减法

对于补码来说,无论加法还是减法,最后都会转变成加法,由加法器实现运算,符号位也参与运算

技巧

原码补码后互换的技巧往(负数),从数的右边往左开始数 ,遇到“0”不理它,直到遇到第一个“1”为止, 以后(不包括当前位)的每一位数取反即是它的原码或补码 ,符号位不变,还是“1” (补码的补码是原码)

②由[x]快速求[-x]的方法符号位数值位全部取反末位+1

例子

设机器字长为8位(含1位符号位),A = 15,B = -24,求[A+B]补和[A−B]补
A = +1111→原码:0,0001111→补码:0,0001111

B = -11000→原码:1,0011000→补码:1,1101000
[A+B]= [A]+ [B]= 0,0001111 + 1,1101000 = 1,1110111

原码:1,0001001 真值-9

[A-B]= [A]+ [-B]= 0,0001111 + 0,0011000 = 0,0100111
原码:0,0100111 真值+39

A = 15,B = -24,C = 124,求[A+C]=139补和[B−C]=-148补

[A+C]补= 0,0001111 + 0,1111100 = 1,0001011 真值-117    溢出

[B−C]补= 1,1101000 + 1,0000100 =0,1101100 真值+108    溢出

溢出

判断

逻辑表达式

逻辑表达式

:如ABC,表示A与B与C,仅当A、B、C均为1时,ABC为1,A、B、C中有一个或多个为0,则ABC为0

:如A+B+C,表示A或B或C,仅当,A、B、C均为0时,A+B+C为0,A、B、C中有一个或多个为1,则A+B+C为1

:如𝐴,表示A非,若A为1,则𝐴为0若A为0,则𝐴为1

问题

只有“正数+正数”才会上溢——正+正=负

只有“负数+负数”才会下溢如:加减结果为11100,10.110001011——负+负=正

A = 15,B = -24,C = 124,求[A+C]=139补和[B−C]=-148补

[A+C]补= 0,0001111 + 0,1111100 = 1,0001011 真值-117   

[B−C]补= 1,1101000 + 1,0000100 =0,1101100 真值+108   

方法一

采用一位符号位设A的符号为𝑨𝒔,B的符号为𝑩𝒔,运算结果的符号为𝑺𝒔

溢出逻辑表达式为V=AsBs𝐒𝐬+𝐀𝐬𝐁𝐬Ss

若V=0,表示无溢出

若V=1,表示有溢出

只有当110001时,也就是负加负等于正,或者正加正等于负才会溢出

方法二

采用一位符号位,根据数据位进位情况判断溢出

符号位的进位CS 最高数值位的进位C1
上溢              0                             1
下溢              1                             0

即:CS与C1不同时有溢出

处理“不同”的逻辑符号:异或⊕

溢出逻辑判断表达式为V=CSC1

V=0,表示无溢出;V=1,表示有溢出

特殊情况1,100 0000和1,100 0000相加也就是-64+-64=-128的情况CS 和C1都等于1,也就是V=1⊕1=0,判断为没溢出,此时1, 000 0000=-128也确实没错,没有溢出

方法三

采用双符号位,正数符号为00,负数符号为11【同法二的思想,把进位位当作第二符号位】

[A+C]补= 00,0001111 + 00,1111100 = 01,0001011 上溢

[B−C]补= 11,1101000 + 11,0000100 = 10,1101100 下溢

记两个符号位为SS1SS2,则V=SS1SS2

V=0,表示无溢出;若V=1,表示有溢出
没有溢出最后得到得两个符号位一定是相同的

[A+B]补= 00,0001111 + 11,1101000 = 11,1110111

[A -B]补= 00,0001111 + 00,0011000 = 00,0100111

【实际存储时只存储1个符号位,运算时会复制一个符号位】

双符号位补码又称:模4补码

单符号位补码又称:模2补码

符号

扩展

int→long,短数据→长数据。多出来的那些位应该怎么填补?

定点数原码乘法运算(几乎不考)

运算器

用于实现算术运算(如:加减乘除)、逻辑运算(如:与或非)

ACC: 累加器,用于存放操作数,或运算结果。

MQ: 乘商寄存器,在乘、除运算时,用于存放操作数或运算结果。

X: 通用的操作数寄存器,用于存放操作数

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

原码的一位乘法

设机器字长为n+1=5位(含1位符号位),[x]原= 1.1101,[y]原= 0.1011,采用原码一位乘法求x·y
实现方法:先加法再右移位,重复n 

符号单独处理(先把符号位都换成0,也就是取绝对值相乘):符号位= xsys

数值位取绝对值进行乘法计算 [ |x| ]=0.1101 [ |y| ]=0.1011

运算器实现原码乘法的方法:

手算模拟实现原码乘法
设机器字长为5位(含1位符号位,n=4),x = −0.1101,y = +0.1011,采用原码一位乘法求x·y

• 乘数的符号位不参与运算,可以省略

原码一位乘可以只用单符号位

• 答题时最终结果最好写为原码机器数

原码一位乘法:

(机器字长n+1,数值部分占n位)

符号位通过异或确定;数值部分通过被乘数和乘数绝对值的n轮加法移位完成根据当前乘数中参与运算的位确定(ACC)加什么。若当前运算位=1则(ACC)+[|x|]原若=0则(ACC)+0每轮加法后ACC、MQ的内容统一逻辑右移

符号位Ps=xs⊕ys=1⊕0=1
得x·y=-0.10001111(真值)
也就是=1.10001111(机器数)

定点数补码乘法运算(几乎不考)

问题

设机器字长为5位(含1位符号位,n=4),x = −0.1101,y = +0.1011,采用Booth算法求x·y
[x]补=1.0011,[−x]补=0.1101,[y]补=0.1011

对比

原码一位乘法:

进行n轮加法、移位

每次加法可能+0、+[|x|]

每次移位是“逻辑右移

符号位不参与运算

根据当前MQ中的最低位来确定加什么

MQ中最低位= 1时,(ACC)+[|x|]

MQ中最低位= 0时,(ACC)+0
【符号位通过乘数和被乘数的符号的异或运算来决定】

补码一位乘法:

进行n轮加法、移位,最后再多来一次加法

每次加法可能+0、+[x]、+[-x]

每次移位是“补码的算数右移

符号位参与运算

根据当前MQ中的最低位辅助位来确定加什么

辅助位- MQ中“最低位”= 1时,(ACC)+[x]

辅助位- MQ中“最低位”= 0时,(ACC)+0

辅助位- MQ中“最低位”= -1时,(ACC)+[-x]
【符号位通过以上乘法操作自然而然地确定

计算

过程

运算器实现补码乘法的过程:

辅助位加在MQ乘商寄存器的最后一位,导致MQ变成n+2位,由于要保持CPU当中的寄存器长度保持统一,所以需要ACC和X寄存器的长度也加一位,被用来表示双符号位【原码乘法在MQX寄存器种存入乘数和被乘数的绝对值,而补码乘法直接把完整的补码存进去了,也就是包括符号位,而不是和原码一样把符号位都变成0

手算实现补码一位乘法过程:

[x·y]补= 11.01110001

即x·y = −0.10001111

n轮加法、算数右移,最后还要多来一次加法,即符号位参与运算,加法规则如下:

辅助位- MQ中最低位= 1时,(ACC)+[x]

辅助位- MQ中最低位= 0时,(ACC)+0

辅助位- MQ中最低位= -1时,(ACC)+[-x]
 

补码的算数右移

符号位不动,数值位右移,正数右移补0,

负数右移补1(符号位是啥就补啥)
 

注:一般来说,Booth算法的被乘数、部分积采用双符号位补码

定点数原码除法运算(几乎不考)

手算

除法

设机器字长为5位(含1位符号位,n=4),x=0.1011,y=0.1101,求x/y【两个正数相除】
(0.1011×24)÷(0.1101×24)

x/y结果为0.1101

余数为0.00000111

规律:忽略小数点,每确定一位商,进行一次减法,得到4位余数,在余数末尾补0,再确定下一位商。确定5位商即可停止(机器字长为5位)

运算器

用于实现算术运算(如:加减乘除)、逻辑运算(如:与或非)

ACC: 累加器,用于存放操作数,或运算结果。

MQ: 乘商寄存器,在乘、除运算时,用于存放操作数或运算结果。

X: 通用的操作数寄存器,用于存放操作数

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

原码

除法
——
恢复余数法

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

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

实现方法:先减法再左移,重复n上商01,被除数/余数-除数为正则1,为负则0,余数末尾补0,补0的实际意义是ACCMQ整体左移,而MQ起初存的是全0的商,所以左移ACC余数末尾就补0

符号单独处理:符号位= xsys
数值位取绝对值进行除法计算 |x|=0.1011,|y|=0.1101

运算器实现原码除法的方法——恢复余数法:

手算模拟实现原码除法——恢复余数法:

设机器字长为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而定点小数无法表示大于1的范围,硬件通过进行除法运算的第一步求出的商来判断被除数是否小于除数,正常情况下第一步余数/被除数—除数一定是负值,如果得到的是正值,也就是商1的话,那么就说明被除数比除数更大,那么硬件就会检测出这个问题直接停止除法运算,这种计算无法使用定线小数来表示

定点数补码除法运算(几乎不考)

补码

除法

补码的除法运算与原码的加减交替法/不恢复余数法有很多类似的地 方,补码的除法也是使用加减交替法来进行计算的。
区别:符号位参与运算,所以不用绝对值 都采用双符号位

原理:余数与除数同号,说明够减,如4-2=2够减商1,反之不够减掉

第七节:进位计数制

第八节:数据的存储和排列

大端模式

最高的有效字节(MSB)放到地址的低位,最低有效字节(LSB)放到地址的高位【便于人类阅读】

小端模式

最低有效字节(LSB)放到地址的低位,最高的有效字节(MSB)放到地址的高位【便于机器处理】

边界对齐

现代计算机通常是按字节编址,即每个字节对应1个地址

通常也支持按字、按半字、按字节寻址。

假设存储字长为32位,则1个字=32bit,半字=16bit每次访存只能读/1个字(只能读一行)
【空间换时间的存储方式,虽然浪费了一些空间,但是节省了访存次数,时间换空间】

第九节:浮点数的表示和运算

浮点数的表示

浮点数的作用

定点数可表示的数字范围有限,但我们不能无限制地增加数据的长度——浮点数的作用就是在位数不变的情况下增加数据表示范围

浮点数的基本原理

定点数

如纯小数0.1011和纯整数11110

浮点数

阶码

常用补码移码表示的定点整数阶码反应数值的大小

尾数

常用补码原码表示的定点小数尾数反应精度

浮点数的真值

N=rE×M(r为阶码的底,通常为2,也可为4,8)

类比十进制:+302657264526 = +3.026 * 10+11

可记为:+11 +3.026

阶码E反映浮点数的表示范围小数点的实际位置

尾数M的数值部分的位数n反映浮点数的精度

尾数给出一个小数,阶码指明了小数点要向前/向后移动几位。

例题

例:阶码、尾数均用补码表示,求a、b的真值

a = 0,01;1.1001

b = 0,10;0.01001

1B的存储空间存不下b,那么如何在存储空间不变的情况下尽可能多保留它的精度,这就是浮点数位数的规格化

浮点数的规格化

类比十进制:

+302657264526 = +3.026 * 10 +11

可记为:+11 +3.026

也可记为:+14 +0.003位数最高位无效值丧失精度

规格化浮点数

规定尾数的最高数值位必须是一个有效值

左规

当浮点数运算的结果为非规格化时要进行规格化处理,

尾数算数左移一位,阶码减1

右规

当浮点数运算的结果尾数出现溢出(双符号位为01或10)时,

尾数算数右移一位,阶码加1

注:采用“双符号位”,当溢出发生时,可以挽救。更高的符号位是正确的符号位

浮点数的表示范围
408

已删

1. 用原码表示的尾数进行规格化:

正数为0.1××…×的形式,其最大值表示为0.11…1;最小值表示为0.10…0。

尾数的表示范围为1/2≤M≤(1−2−n)。

负数为1.1××…×的形式,其最大值表示为1.10…0;最小值表示为1.11…1。

尾数的表示范围为(12n)M≤−1/2【规格化的原码尾数,最高数值位一定是1

2. 用补码表示的尾数进行规格化:

正数为0.1××…×的形式,其最大值表示为0.11…1;最小值表示为0.10…0。

尾数的表示范围为1/2≤M≤(1−2−n)。

负数为1.0××…×的形式,其最大值表示为1.01…1;最小值表示为1.00…0。

尾数的表示范围为1M≤−(1/2+2n)【规格化的补码尾数,符号位与最高数值位一定相反】

例题:

若某浮点数的阶码、尾数用补码表示,共4+8位:

0,110;1,1110100 如何规格化?→0,011;1,0100000

注:补码算数左移,低位补0;补码算数右移,高位补1

IEEE 754标准(阶码用移码表示)几乎必考

移码

补码的基础上将符号位取反。注意:移码只能用于表示整数【用来表示阶码】

移码的定义

普通情况:移码=真值+偏置值【偏置值一般取2n-1此时移码=补码符号位取反
此处8位移码的偏置值=128D=1000 0000B,即2n-1

真值-127 = -1111111B

移码= -1111111 + 10000000 = 0000 0001

真值-3= -11B

移码= -11 + 10000000 = 0111 1101

真值+0 = +0

移码= +0 + 10000000 = 1000 0000

真值+3 = +11B

移码= +11 + 10000000 = 1000 0011

真值+127 = +1111111B

移码= +1111111 + 10000000 = 1111 1111

 

IEEE754标准:移码=真值+偏置值【偏置值一般取2n-1-1,此时移码=补码符号位取反】
偏置值=127D=0111 1111B,即2n-1-1

真值-128 = -1000 0000B

移码=-1000 0000+01111111 =1111 1111

真值-127 = -111 1111B

移码= -111 1111+01111111 = 0000 0000

真值-126 = -111 1110B

移码= -111 1110+01111111 = 0000 0001

真值+0 = +0

移码= +0 + 01111111 = 0111 1111

真值+127 = +1111111B

移码= +111 1111+01111111 =1111 1110

IEEE754标准

例:将十进制数-0.75转换为IEEE 754的单精度浮点数格式表示。

(-0.75)10 = (-0.11)2 = (-1.1)2×2-1

数符= 1

尾数部分= .1000000….. (隐含最高位1).0

阶码真值= -1

单精度浮点型偏移量= 127D

移码=阶码真值+偏移量= -1 + 111 1111 = 0111 1110(凑足8位)

1 01111110 10000000000000000000000

例:IEEE 754的单精度浮点数C0 A0 00 00 H的值时多少。

C0 A0 00 00 H→ 1100 0000 1010 0000 0000 0000 0000 0000

数符= 1→是个负数

尾数部分= .0100…. (隐含最高位1)→尾数真值= (1.01)2

移码= 10000001,若看作无符号数= 129D

单精度浮点型偏移量= 127D

阶码真值=移码-偏移量= 1000 0001 – 111 1111 = (0000 0010)2 = (2)10

→ 浮点数真值= (-1.01)2×22 = -1.25 ×22 = - 5.0

IEEE 754单精度浮点型能表示的最小绝对值、最大绝对值是多少?

最小绝对值:尾数全为0,阶码真值最小-126,对应移码机器数0000 0001

此时整体的真值为(1.0)2×2-126

最大绝对值:尾数全为1,阶码真值最大127,对应移码机器数1111 1110

此时整体的真值为(1.111…11)2×2127

【若要表示的数绝对值还要更小,怎么办?】
只有1E254时,真值= (1)s×1.M×2E127
死的规定:
阶码E全为0,尾数M不全为0时,表示非规格化小数±(0.xx…x)2×2-126【隐含最高位变为0
阶码E全为0,尾数M全为0时,表示真值±0
阶码E全为1,尾数M全为0时,表示无穷大±∞
阶码E全为1,尾数M不全为0时,表示非数值“NaN” (Not a Number)【如0/0∞-∞等非法运算的结果就是NaN

【由浮点数确定真值(阶码不是全0、也不是全1)】

1. 根据“某浮点数”确定数符、阶码、尾数的分布

2. 确定尾数1.M (注意补充最高的隐含位1)

3. 确定阶码的真值=移码-偏置值(可将移码看作无符号数,用无符号数的值减去偏置值)

4. (−1)s×1.M×2E−偏置值

浮点数的加减运算与强制类型转换

浮点数加减运算步骤

9.85211×10^12 + 9.96007×10^10

对阶

9.85211×10^12 + 0.0996007×10^12

尾数加减

9.9517107 ×10^12

规格化

如果尾数加减出现类似0.0099517 ×10^12 时,需要“左规”;如果尾数加减出现类似99.517107 ×10^12 时,需要“右规”

舍入

若规定只能保留6位有效尾数,则

9.9517107 ×10^12→9.95171 ×10^12 (多余的直接砍掉)

或者,9.9517107 ×10^12→9.95172 ×10^12(若砍掉部分非0,则入1)

或者,也可以采用四舍五入的原则,当舍弃位≥5时,高位入1

判溢出

若规定阶码不能超过两位,则运算后阶码超出范围,则溢出

如:9.85211×10^99 + 9.96007×10^99 = 19.81218×10^99

规格化并用四舍五入的原则保留6位尾数,得1.98122×10^100

阶码超过两位,发生溢出(注:尾数溢出未必导致整体溢出,也许可

以通过③④两步来拯救)

例题
——
无舍入

情况

浮点数的加减运算

舍入

  • 0”舍“1”入法:类似于十进制数运算中的“四舍五入”法,即在尾数右移时,被移去的最高数值位为0,则舍去;被移去的最高数值位为1,则在尾数的末位加1。这样做可能会使尾数又溢出,此时需再做一次右规
  • 恒置“1”法:尾数右移时,不论丢掉的最高数值位是“1”还是“0”,都使右移后的尾数末位恒置“1”。这种方法同样有使尾数变大和变小的两种可能

例题

——
有舍入

情况
 

①对阶
②尾数加减   如:加减结果为11100,10.110001011
③规格化      01入:11100,10.11000101111101,11.011000101 1(右规)

                                                                    11101,11.011000110 1
                      
恒置1:  11100,10.110001011→11101,11.011000101 1
                                                                    →11101,11.011000101 1
④舍入
⑤判溢出

【有的计算机可能会把浮点数的尾数部分单独拆出去计算(24bit→32bit),算完了经过舍入(32bit→24bit)再拼回浮点数】

强制类型转换

char →int→long→double

float→double
范围、精度从小到大,转换过程没有损失

int→float:可能损失精度

【int只能填入到float尾数部分,阶码部分为默认为0,所以float尾数23+1位,转float精度损失】

float→int:可能溢出及损失精度

32位

int:表示整数,范围-2^31 ~2^31-1 ,有效数字32位

float:表示整数及小数,范围±[2^-126 ~2^127×(2−2^−23)],有效数字23+1=24位

第十节:算数逻辑单元(电路基本原理&加法器设计)

算术逻辑单元的作用与原理

作用

算数运算

加、减、乘、除等

逻辑运算

与、或、非、异或等

辅助功能

移位、求补等

原理

电路基础知识



基本

逻辑

复合

逻辑

反演律(德摩根律)𝑨+𝑩=𝑨·𝑩     𝑨·𝑩=𝑨+𝑩

使用基本的逻辑电路实现异或

加法器的实现

一位全加器

串行加法器

概念

只有一个全加器,数据逐位串行送入加法器中进行运算。进位触发器用来寄存进位信号,以便参与下一次运算

特点

如果操作数长n位,加法就要分n次进行,每次产生一位和,并且串行逐位地送回寄存器,计算的效率比较低

图示

并行加法器

概念

也叫串行进位并行加法器:把n个全加器串接起来,就可进行两个n位数的相加

特点

串行进位又称为行波进位,每一级进位直接依赖于前一级的进位,即进位信号是逐级形成的,这种加法器的运算速度很大程度取决于每一位进位的产生速度

图示

第十节:算数逻辑单元——加法器,ALU的改进(非重点有印象即可)

并行加法器的优化

概念

优化后的并行加法器称为并行进位的并行加法器:各级进位信号同时形成,又称为先行进位、同时进位

图示

4位CLA加法器

原因

虽然能够使得各级信号同时产生,但是电路设计非常麻烦

解决办法

使用4位CLA加法器

图示

新线路指的就是把单个FA产生的Gi和Pi向四位CLA加法器中的前几个加法器直接传递的线路,把四个FA封装成CLA

进位产生函数

当AiBi都为1的时候Gi也为1,也就是AiBi相加产生一个进位向更高位传递

进位传递函数

Ci-1为1的时候,只有当Pi等于1的时候,才会产生一个向高位的进位,也就是Pi等于1的时候把Ci-1的值向上传递了

优化

概念

类似把一位加法器FA串在一起构成串行进位的并行加法器一样可以把4位加法器CLA串在一起构成单级先行进位方式的加法器

单级先行进位方式

又称为组内并行,组间串行进位方式,4位加法器CLA能够迅速的得到每一个组内进位的信息

图示

组内信号

组间信号

进一步优化

原因

由于组件信号的逻辑方式与组内信号的逻辑方式几乎是一模一样的,可以把组间信号的计算方式同样使用一个CLA加法器进行计算——构成多级先行进位方式

多级先行进位方式

又称为组内并行、组间并行进位方式

图示

应用

应用于ALU芯片的优化

ALU芯片优化

Cn+4指的是输入的四位比特信息相加之后向更高位产生的进位

C-1指的是来自低位的一个进位

串行加法器串行进位的并行加法器→组内并行、组间串行进位的加法器→组内并行、组间并行进位的加法器

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是bit不是byte

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值