计算机组成第二章_计算机组成原理第六版课后答案

计算机组成第二章_计算机组成原理第六版课后答案计算机组成第二章数据的表示与运算进位计数制进制转换各种进制的常见书写方式真值和机器数知识回顾与重要考点数据的表示与运算进位计数制r进制计数法KnKn−1……K2K1K0K−1K−2……K−m=Kn∗rn+Kn−1∗rn

数据的表示与运算

进位计数制

r进制计数法
K n K n − 1 … … K 2 K 1 K 0 K − 1 K − 2 … … K − m = K n ∗ r n + K n − 1 ∗ r n − 1 + … … + K 2 ∗ r 2 + K 1 ∗ r 1 + K 0 ∗ r 0 + K − 1 ∗ r − 1 + K − 2 ∗ r − 2 + … … + K − m ∗ r − m K_{n}K_{n-1}……K_{2}K_{1}K_{0}K_{-1}K_{-2}……K_{-m} =K_{n}*r^{n}+K_{n-1}*r^{n-1}+……+K_{2}*r^{2}+K_{1}*r^{1}+K_{0}*r^{0}+K_{-1}*r^{-1}+K_{-2}*r^{-2}+……+K_{-m}*r^{-m} KnKn1K2K1K0K1K2Km=Knrn+Kn1rn1++K2r2+K1r1+K0r0+K1r1+K2r2++Kmrm

基数:每个数码位所用到的不同符号的个数,r进制的基数为r(就是10进制的基数就是0、1、2、3、4、5、6、7、8、9这样)

进制转换

任意进制->十进制

K n K n − 1 … … K 2 K 1 K 0 K − 1 K − 2 … … K − m = K n ∗ r n + K n − 1 ∗ r n − 1 + … … + K 2 ∗ r 2 + K 1 ∗ r 1 + K 0 ∗ r 0 + K − 1 ∗ r − 1 + K − 2 ∗ r − 2 + … … + K − m ∗ r − m K_{n}K_{n-1}……K_{2}K_{1}K_{0}K_{-1}K_{-2}……K_{-m} =K_{n}*r^{n}+K_{n-1}*r^{n-1}+……+K_{2}*r^{2}+K_{1}*r^{1}+K_{0}*r^{0}+K_{-1}*r^{-1}+K_{-2}*r^{-2}+……+K_{-m}*r^{-m} KnKn1K2K1K0K1K2Km=Knrn+Kn1rn1++K2r2+K1r1+K0r0+K1r1+K2r2++Kmrm

就是原来那个

二进制<->八进制
从尾部开始(小数点前),三个为一组,每组转换成对应的八进制符号(如果前面不够了,就在最前面补0,凑齐三个,小数点后面不够了,就在最后面补0,凑齐三个)

例如:1111000010.01101
在这里插入图片描述

二进制<->十六进制
从尾部开始,四个为一组,每组转换成对应的十六进制符号(和八进制一样)
在这里插入图片描述

十进制->任意进制

整数部分和小数部分需要分开进行处理

在这里插入图片描述
十进制要转化为什么进制,就除以多少(图中是变成二进制),然后余数从k6-k0就是二进制形式(这是整数部分的)

当然一般都这么写

在这里插入图片描述
注:一般十进制转二进制都是先变成十六进制/八进制在变成二进制

在这里插入图片描述
小数点后就是乘以进制数(这图上是二进制)的方法,这里就是第一次就是第一位开始(一直到乘以进制数不再有小数位即可)

这里面可能会出现无限循环的情况,只做循环部分即可

这个应该就是多看看例题啥的就能理解,很简单

各种进制的常见书写方式

在这里插入图片描述

真值和机器数

在这里插入图片描述

真值:符合人类习惯的数字(可以有正负)

机器数:数字实际存到机器里的形式,正负号需要被“数字化”

知识回顾与重要考点

在这里插入图片描述

BCD码

本节总览
在这里插入图片描述
BCD码:用4个二进制位表示一个10进制(当然,这中间会有6种方式冗余)

8421码

就是4个二进制位的权值分别是8、4、2、1,同时因为权值固定被称为有权嘛
各个位如下表示
在这里插入图片描述
举个例子:
985 —1001 1000 0101

8421码的加法

例如
1+3

0001+0011=0100

5+8

0101+1000=1101

现在1101不在各位数字的映射表中,因此1101需要修正,也就是再+6(+0110)变成10011,最终用8421码表示就是0001 0011=13

9+9

1001+1001=10010

这很明显也是超出了,所以要修正也是+6(+0110),变成11000,8421码表示就是00010010=18

注:如果相加结果在映射表示范围内,则无需修正

余3码

很容易理解就是8421码+(0011)

在这里插入图片描述
当+0011后,发现每个位上的权值不在固定,因此余3码也被称为无权吗

2421码

在这里插入图片描述
其实就是把各个位上的权值改成了2、4、2、1,并且为了防止错误,规定0-4上的首尾只能是0,5-9上的首位必须是1

知识回顾与重要考点

在这里插入图片描述

字符与字符串

英文字符在计算机内的表示(ASCII码)

英文字符等总和只有128个,虽然只需要7位2进制数表示,但是计算机中一般使用2的倍数,那么就是8位

在计算机中,英文符号都是使用ASCII码表示的
在这里插入图片描述
其中32~126都是可印刷字符(普通字符),日常生活所用
其余都是控制、通信字符(例如127-DEL删除字符、6-ACK确认帧)

数字:48(0011 0000)~57(0011 1001)
可以发现前面都是0011,后面的四位刚好是对应的BCD码

大写字母:65(0100 0001)~90(0101 1010)
小写字母:97(0110 0001)~122(0111 1000)

可以发现前三位是不变的010,011,后面第一位都是0 0001开始

汉字在计算机中的表示与编码

GB2312-80:汉字+各种符号共7445个(1980年的,并且没有囊括所有)

区位码:94个区,每个区94个位置(就好像一个94*94的矩阵,每一个位置代表一个汉字)

在这里插入图片描述
解释:第一个16 01是啊汉字的区位码

第一次操作+20H

为了区分开ASCII码里面的通信、控制字符(被称为国标码)

第二次操作+80H

为了防止被误认为是ASCII码,直接超过128(被称为汉字内码)

当然,这只是存储在计算机内部的,其中输入输出还需要不同的编码

输入:输入编码(由输入法转化为国标码,然后由计算机内部转化为汉字内码)

输出:汉字字形码(每个汉字的输出其实是由许多像素点组成,输出是每个汉字不同,字形码就不同,对照输出)

字符串

首先是英文字符在计算机内部的存储

在这里插入图片描述
这个应该很容易理解,不需要解释吧

中文在计算机内部的存储
在这里插入图片描述
这中间分为两个模式(种类),一种是大端模式、一种是小端模式,其中的区别就是大端是数据的最高有效字节存放在低地址,小短是数据的最高有效字节存放在高地址单元中

知识回顾与重要考点

在这里插入图片描述

校验码

由于数据在存储、传输、运算过程中出现误差,因此需要校验数据是否正确

校验原理

在这里插入图片描述
码字:这其中一个A就是一个码字

码字间的距离:将两个码字进行对比,具有不同位的个数(例如左边的A和B,距离为1;右边的A和B,距离为2)

码距:一种编码方案有若干个合法码字(右边就是只有4种,A、B、C、D,各个合法码字之间的最小距离称为“码距”(d))

当d=1时,无检错能力;当d=2时,有检错能力;当 d ≥ 3 d\ge 3 d3时,若设计合理,可能具有检错,纠错能力

奇偶校验码

在这里插入图片描述
奇校验码:整个校验码(有效信息位和校验位)中“1”的个数为奇数。

偶校验码:整个校验码(有效信息位和校验位)中“1”的个数为偶数。

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

奇校验: \qquad 11001101 \qquad 01010111
偶校验: \qquad 01001101 \qquad 11010111

这个就很容易从定义中理解,就不解释了

如何检错:
当发生位错误的时候,发现和定义不同,就知道这个错误了(但是不能知道那一位错误,因此奇偶校验码只有检错能力,没有纠错能力)

注:只能判断奇数次的位错误

硬件实现奇偶校验

偶校验:各信息进行异或(模2加)运算,得到的结果为偶校验位
在这里插入图片描述
上图是硬件对第一个编码1001101进行校验,很容易理解

知识回顾与重要考点

在这里插入图片描述

海明码

将信息位分组进行偶校验,分成k组,这样多个校验位就能确定错误的位置

k个校验码可以携带 2 k 2^{k} 2k种状态,而当校验码插入信息后,总共是n+k位,并且还包含了最原始正确的一种情况

因此我们可以通过公式 2 k ≥ n + k + 1 2^{k}\ge n+k+1 2kn+k+1来确定我们最终需要多少个校验位

海明码规定,第i个校验位,应该放到最终的海明码的 2 i − 1 2^{i-1} 2i1的位置上

举例:
n为4,那么校验位就是3
数据码 D 4 D 3 D 2 D 1 D_{4}D_{3}D_{2}D_{1} D4D3D2D1
校验码 P 3 P 2 P 1 P_{3}P_{2}P_{1} P3P2P1
海明码就是 D 4 D 3 D 2 P 3 D 1 P 2 P 1 D_{4}D_{3}D_{2}P_{3}D_{1}P_{2}P_{1} D4D3D2P3D1P2P1
在这里插入图片描述

校验码值的确定方式
P 1 P_{1} P1就是当权值为1的那位是1的时候,进行异或操作

P 2 P_{2} P2就是当权值为2的那位是1的时候,进行异或操作

P 3 P_{3} P3就是当权值为4的那位是1的时候,进行异或操作

在这里插入图片描述
纠错方式:

我们用原来求P的值和P一起进行异或,如果没错能求出3个0,如果错误了,就会如下图一样显示错误的位数

在这里插入图片描述
补充内容:
海明码只有一位的纠错能力,也就是位错误到达两次及以上的时候海明码无法纠正错误

因此在实际应用中还会有一个全校验码,规则如下所示:
在这里插入图片描述

知识点回顾

在这里插入图片描述

循环冗余校验码(CRC码)

约定一个除数(二进制),如果余数不等于0则发生错误

在这里插入图片描述
校验位就是余数

如果出错就可以进行重传或者单比特位纠错

除数在题目中一般就是生成多项式 G ( x ) = x 3 + x 2 + 1 G(x)=x^{3}+x^{2}+1 G(x)=x3+x2+1就是除数1101
R位的校验码其实就是生成多项式的最高次幂(或者二进制的长度)

步骤:

  1. 确定K、R以及生成多项式对应的二进制码
    K=信息码的长度
    R=生成多项式的最高次幂(二进制的长度)
    校验码位数N=K+R
  2. 移位
    信息码左移R位,低位补0
  3. 相除
    对移位后的信息码,用生成多项式进行模2除法,产生余数
  4. 检错和纠错
    发送为101001 001
    接收为101001 001
    然后在用1101进行模2除,余数为0,代表没有错
    接收为101001 011
    用1101进行模2除,余数为010,代表第二位出现问题
    在这里插入图片描述
    为啥对上面代表第二位出错画横线呢,因为如上图所示出错的可能不是第二位,可能是第9位,因此不一定(也就是说,信息码的长度太长,导致无法用三个比特位表示;相当于当信息码短的时候CRC拥有纠错能力,CRC码超过 2 检 验 码 位 数 2^{检验码位数} 2时,没有检错能力)

举例:
信息码101001
生成多项式 G ( x ) = x 3 + x 2 + 1 G(x)=x^{3}+x^{2}+1 G(x)=x3+x2+1就是除数1101

在这里插入图片描述
这就是求校验码的过程,这里来讲述一下是如何进行的

这里的除法只看最高位,如果最高位为1,则商取1,然后后三位进行异或操作,如果最高位为0,则商取0,后三位进行异或操作。

最终会获得校验码(只比除数少一位)

最终的CRC码就是101001 001

CRC检错特点
  1. 可以检测出所有奇数个错误
  2. 可以检测出所有双比特的错误
  3. 可以检测出所有小于等于校验位长度的连续错误
知识回顾

在这里插入图片描述

定点数

定点数:小数点位置固定的数 \qquad 996.007

浮点数:小数点位置不固定的数 9.96007 ∗ 1 0 2 \qquad 9.96007*10^{2} 9.96007102

二进制的定点数和浮点数也和这个相似

无符号数

无符号数:整个机器字长的全部:二进制位均为数值位,没有符号位,相当于数的绝对值。

n位无符号数的表示范围:0~ 2 n − 1 2^{n}-1 2n1

注:通常无符号数只有整数,没有小数

有符号数

定点整数

在这里插入图片描述
这个就很简单,除了第一位符号为以后全是整数的数值部分,小数点隐含在数值部分最后

原码:用尾数表示真值的绝对值,符号位“0/1”对应“正/负”

在这里插入图片描述
表示范围:
若机器字长n+1位,原码整数的表示范围 − ( 2 n − 1 ) ≤ x ≤ ( 2 n − 1 ) -(2^{n}-1)\le x \le (2^{n}-1) (2n1)x(2n1)关于原点对称

若机器字长n+1位,反码整数的表示范围 − ( 2 n − 1 ) ≤ x ≤ ( 2 n − 1 ) -(2^{n}-1)\le x \le (2^{n}-1) (2n1)x(2n1)关于原点对称
但是关于真值0的表示有些不同
[ − 0 ] 反 = 11111111 [-0]_{反}=1 1111111 [0]=11111111

定点整数补码 [ x ] 补 = 10000000 [x]_{补}=1 0000000 [x]=10000000表示x= − 2 7 -2^{7} 27
若机器字长n+1位,补码小数的表示范围 − 2 n ≤ x ≤ ( 2 n − 1 ) -2^{n}\le x \le (2^{n}-1) 2nx(2n1)(比原码多一个-2^{n}),真值0只有一种表示方式

若机器字长n+1位,移码整数的表示范围与补码相同(只能用于整数表示,作用是让计算机更容易比较大小)真值0只有一种表示方式
在这里插入图片描述

其中真值0有+0和-0两种形式(说明能表示的字数为 2 n + 1 − 2 2^{n+1}-2 2n+12个)

举例:

原码表示
+19D=0 0010011(符号位+19的二进制)
-19D=1 0010011(符号位+19的二进制)
常写为: [ x ] 原 = 10010011 [x]_{原}=1 0010011 [x]=10010011

反码表示
若符号位为0,则反码与原码相同
若符号位为1,则数值位全部取反
[ x ] 原 = 00010011 [x]_{原}=0 0010011 [x]=00010011
[ x ] 反 = 00010011 [x]_{反}=0 0010011 [x]=00010011

[ x ] 原 = 10010011 [x]_{原}=1 0010011 [x]=10010011
[ x ] 反 = 11101100 [x]_{反}=1 1101100 [x]=11101100

补码表示
正数的补码=原码
负数的补码=反码+1(要考虑进位)
[ x ] 原 = 00010011 [x]_{原}=0 0010011 [x]=00010011
[ x ] 反 = 00010011 [x]_{反}=0 0010011 [x]=00010011
[ x ] 补 = 00010011 [x]_{补}=0 0010011 [x]=00010011

[ x ] 原 = 10010011 [x]_{原}=1 0010011 [x]=10010011
[ x ] 反 = 11101100 [x]_{反}=1 1101100 [x]=11101100
[ x ] 补 = 11101101 [x]_{补}=1 1101101 [x]=11101101

移码表示
补码的基础上将符号位取反
[ x ] 原 = 00010011 [x]_{原}=0 0010011 [x]=00010011
[ x ] 反 = 00010011 [x]_{反}=0 0010011 [x]=00010011
[ x ] 补 = 00010011 [x]_{补}=0 0010011 [x]=00010011
[ x ] 移 = 10010011 [x]_{移}=1 0010011 [x]=10010011

[ x ] 原 = 10010011 [x]_{原}=1 0010011 [x]=10010011
[ x ] 反 = 11101100 [x]_{反}=1 1101100 [x]=11101100
[ x ] 补 = 11101101 [x]_{补}=1 1101101 [x]=11101101
[ x ] 移 = 01101101 [x]_{移}=0 1101101 [x]=01101101

定点小数
在这里插入图片描述
表示时的结构:

在这里插入图片描述
表示范围:
若机器字长n+1位,原码整数的表示范围 − ( 1 − 2 − n ) ≤ x ≤ ( 1 − 2 − n ) -(1-2^{-n})\le x \le (1-2^{-n}) (12n)x(12n)关于原点对称
真值0同样也是两种形式

若机器字长n+1位,反码小数的表示范围 − ( 1 − 2 − n ) ≤ x ≤ ( 1 − 2 − n ) -(1-2^{-n})\le x \le (1-2^{-n}) (12n)x(12n)关于原点对称

定点小数补码 [ x ] 补 = 1.0000000 [x]_{补}=1.0000000 [x]=1.0000000表示x=1
若机器字长n+1位,补码小数的表示范围 − 1 ≤ x ≤ ( 1 − 2 − n ) -1\le x \le (1-2^{-n}) 1x(12n)(比原码多一个-1)

原码表示
+0.75D=0 1100000
-0.75D=1 1100000
常写为: [ x ] 原 = 1.1100000 [x]_{原}=1.1100000 [x]=1.1100000
若为指明机器字长: [ x ] 原 = 1.11 [x]_{原}=1.11 [x]=1.11

反码表示
[ x ] 原 = 0.1100000 [x]_{原}=0.1100000 [x]=0.1100000
[ x ] 反 = 0.1100000 [x]_{反}=0.1100000 [x]=0.1100000

[ x ] 原 = 1.1100000 [x]_{原}=1.1100000 [x]=1.1100000
[ x ] 反 = 1.0011111 [x]_{反}=1.0011111 [x]=1.0011111

补码表示
[ x ] 原 = 0.1100000 [x]_{原}=0.1100000 [x]=0.1100000
[ x ] 反 = 0.1100000 [x]_{反}=0.1100000 [x]=0.1100000
[ x ] 补 = 0.1100000 [x]_{补}=0.1100000 [x]=0.1100000

[ x ] 原 = 1.1100000 [x]_{原}=1.1100000 [x]=1.1100000
[ x ] 反 = 1.0011111 [x]_{反}=1.0011111 [x]=1.0011111
[ x ] 补 = 1.0100000 [x]_{补}=1.0100000 [x]=1.0100000

注:当规定长度的时候,需要在高位补0,满足规定位数(看上面那个就是活生生的例子)

小技巧:由 [ x ] 补 快 速 求 [ − x ] 补 的 方 法 [x]_{补}快速求[-x]_{补}的方法 [x][x],符号位、数值位全部取反,末位+1

原码、反码、补码的作用

补码:让减法操作转变为加法操作,节省硬件成本

注:没弄明白这节课的重点是什么

定点数运算

移位运算

在这里插入图片描述

算数移位

在这里插入图片描述
上图就是原码的算数右移,相当于数值除以2

在这里插入图片描述
上图是原码的算数左移,相当于乘以2

原码的算数移位—符号位保持不变,仅对数值位进行移位

右移:高位补0,低位舍弃。若舍弃的位=0,则相当于除以2;若舍弃的位不等于0,则丢失精度

左移:低位补0,高位舍弃。若舍弃的位=0,则相当于乘以2,若舍弃的位不等于0,则会出现严重误差

反码(正数)的算数移位

右移:高位补0,低位舍弃

左移:低位补0,高位舍弃

反码(负数)的算数移位

右移:高位补1,低位舍弃

左移:低位补1,高位舍弃

补码(正数)的算数移位

右移:高位补0,低位舍弃

左移:低位补0,高位舍弃

补码(负数)的算数移位

右移:高位补1,低位舍弃

左移:低位补0,高位舍弃

表格总结:

在这里插入图片描述
左移相当于乘以2,右移相当于除以2

由于位数有限,因此有时候无法用算数移位精确的等效乘除法(当有数值位是1被舍弃时)

逻辑移位

逻辑右移:高位补0,低位舍弃。

逻辑左移:低位补0,高位舍弃。

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

循环移位

在这里插入图片描述
上图就是循环移位的操作,很容易理解

这些主要还是算数移位需要计算,别的都是拿来做其他操作,并不是运算

知识点回顾

在这里插入图片描述

加减运算

原码的加法运算

正+正→绝对值做加法,结果为正

负+负→绝对值做加法,结果为负

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

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

原码的减法运算(减数符号取反,转变为加法)
正-负→正+正
负-正→负+负
正-正→正+负
负-负→负+正

补码的加减与运算
[ A + B ] 补 = [ A ] 补 + [ B ] 补 [A+B]_{补}=[A]_{补}+[B]_{补} [A+B]=[A]+[B]
[ A + B ] 补 = [ A ] 补 + [ − B ] 补 [A+B]_{补}=[A]_{补}+[-B]_{补} [A+B]=[A]+[B]

[ − B ] 补 [-B]_{补} [B]= [ B ] 补 [B]_{补} [B]连同符号位取反+1

移出判断

方法一:
A的符号位 A S A_{S} AS
B的符号位 B S B_{S} BS
S的符号位 S S S_{S} SS
V = A S B S S S ‾ + A S ‾ B S ‾ S S V=A_{S}B_{S}\overline{S_{S}}+\overline{A_{S}}\overline{B_{S}}S_{S} V=ASBSSS+ASBSSS

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

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

符号位进位 C S C_{S} CS 最高数值位的进位 C 1 C_{1} C1

上溢 C S = 0 C 1 = 1 C_{S}=0\qquad C_{1}=1 CS=0C1=1

下溢 C S = 1 C 1 = 0 C_{S}=1\qquad C_{1}=0 CS=1C1=0

即: C S ≠ C 1 C_{S}\ne C_{1} CS=C1时有溢出

在硬件中就是用异或
V = C S ⊕ C 1 V=C_{S}\oplus C_{1} V=CSC1

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

方法三:
采用双符号数
正数符号为00,负数符号为11

当符号位=01时—上溢
当符号位=10时—下溢

硬件操作和方法二相同

符号扩展

正整数(因为原码反码补码都一样所以只有一个样子)

0 1011010→0 00000000 1011010

负整数
原码操作不变
1 1011010→1 00000000 1011010

反码、补码都是对原码做操作即可(和原来的原码变反码补码一样的操作)

正小数(因为原码反码补码都一样所以只有一个样子)

0.1011010→0.1011010 00000000

负小数

1.1011010→1.1011010 00000000

反码、补码都是对原码做操作即可(和原来的原码变反码补码一样的操作)

定点整数的符号扩展:在原符号位和数值位中间添加新位,正数都添0;负数原码添0,负数反、补码添1

定点小数的符号扩展:在原符号位和数值位后面添加新位,正数都添0;负数原、补码添0,负数反码添1

知识点回顾

在这里插入图片描述

乘法运算

在这里插入图片描述
这个二进制的算法其实和十进制的也没有什么区别

但是实际上计算机是无法使用这种方式的,因为数字有正负、需要求和的数太多了(有好多,只要记住计算机不会这么算就行)

原码乘法/除法

设机器字长为n+1=5位(含1位符号位),[x]原= 1.1101,[y]原= 0.1011,采用原码-一位乘法求x*y

符号位单独处理:符号位= x s ⊕ y s x_{s}\oplus y_{s} xsys

数值位取绝对值进行乘法计算

在硬件计算中,实现方式为先加法,再移位,重复n次(这个的话建议看视频,通俗易懂,言语解释比较难懂,其中还有后续的除法2021王道考研计算机组成原理)

浮点数

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

因此浮点数就出现了,为了在位数不变的状态下增加数据表示范围

在这里插入图片描述
浮点数的表示方法就和科学计数法相似

阶符表示科学计数法10的指数的正负

阶码表示10的指数大小(常用补码或移码表示的定点整数)

数符表示表示的数的正负

尾数表示数值(常用原码或补码表示的定点小数)

举例:
302657264526 = 3.026* 1 0 11 10^{11} 1011

用浮点数就是:阶符=0 阶码= ( 11 ) 10 (11)_{10} (11)10要用二进制表示(这里懒得写了),数符=0,尾数= ( 30265 … … ) 10 (30265……)_{10} (30265)10,这里也是二进制,不换了,尾数会一直表示到位数用尽位置

因此尾数的位数会极大的影响到数字的精度

举例:

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

a=0 01 1 1001
b=0 10 0 01001

a的阶码为+1,尾数为-0.1001
b的阶码为+2,尾数为0.01001

a的值就是尾数的小数点右移一位的二进制

b的值就是尾数的小数点右移两位的二进制

浮点数尾数的规格化

就像上面的b所示,尾数其实浪费了一位,因此规格化就是要求b变为0 01 0 1001

也就是尾数的第一位必须是有效数字,至于前面要舍掉多少个0,就在阶码减多少

规格化浮点数:规定尾数的最高数值位必须是一个有效值。

左规:当浮点数运算的结果为非规格化时要进行规格化处理,将尾数算数左移一位,阶码减1

右规:当浮点数运算的结果尾数出现溢出(双符号位为01或10)时,将尾数算数右移一位,阶码加1。

右规举例:
在这里插入图片描述
这东西。。。例子看懂了,但是对于双符号位还是不懂

1.用原码表示的尾数进行规格化:
正数为0.1X x…的形式,其最大值表示为01…1;最小值表示为0.10…0。尾数的表示范围为1/2 ≤ M ≤ \le M \le M(1-2 “)。

负数为1.1X x…的形式,其最大值表示为1.0…0; 最小值表示为1…1. .尾数的表示范围为- (1 2 “) ≤ M ≤ \le M \le M– 1/2。

规格化的原码尾数,最高数值位一定是1

2.用补码表示的尾数进行规格化:
正数为0.1X x…的形式,其最大值表示为011…1; 最小值表示为0.0…0。尾数的表示范围为1/2 ≤ M ≤ \le M \le M(1-2”)。

负数为1.0X x…的形式,其最大值表示为1.01…1 最小值表示为1.00…0。尾数的表示范围为-1 ≤ M ≤ \le M \le M-(1/2+2 “)。

规格化的补码尾数,符号位与最高数值位一定相反

在这里插入图片描述
因为补码尾数符号位为0时,最高位要是1,为1时最高位要是0,并且要左移,因此就是左移三位,就是阶码-3,变成0 011 1 0100000

知识点回顾

在这里插入图片描述

浮点数标准IEEE 754

移码的定义:移码=真值+偏置值

在IEEE754中,偏置值就是127D=0111 1111B

在这里插入图片描述
这是IEEE754标准下的浮点数表示结构,分为数符、阶码和尾数(相比较之前的去掉了阶码的符号位,直接在阶码的最高位中表示)

并且在尾数中默认舍去了最高位的1(尾数用原码表示)

在这里插入图片描述
不同类型的数据类型,对应的浮点数长度不同,具体可由上面看出

短浮点数的真值: ( − 1 ) s ∗ 1. M ∗ 2 E − 127 (-1)^{s}*1.M*2^{E-127} (1)s1.M2E127

s是数符,代表数的正负

当阶码全0的时候表示,尾数的首位就是0,但是尾数不为0,表示为(0.xxx……)* 2 − 126 2^{-126} 2126

当阶码全0,尾数全0,表示真值0

当阶码全1,尾数全0,表示无穷大

当阶码全1,尾数不全0,表示非数值NULL

浮点数运算

  1. 对阶
    阶数小的向阶数大的对齐(也就是阶码变大,尾数部分逻辑右移)
  2. 尾数加减
    这个就很好理解了,就是加减
  3. 规格化
    这个就是遵循浮点数规格(一般是IEEE)
  4. 舍入
    超过精度的位会被舍弃(例如尾数只有12位,但是真值有15位,就会被舍弃掉三位)
  5. 判溢出
    若是阶码超越规定位数,则判断为溢出

举例:
例:已知十进制数X=- -5/256、 Y=+59/1024 ,按机器补码浮点运算规则计算X- Y ,结果用二进制表示,浮点数格式如下:阶符取2位,阶码取3位,数符取2位,尾数取9位(一般在考卷中不会有IEEE 754,因为太长了)

机器补码浮点运算—用补码表示阶码和尾数

X=11 011 11 011000000
Y=11 100 00 111011000

(1)求阶差 [ △ E ] 补 = 11011 + 00100 = 11111 = − 1 [\triangle E]_{补}=11011+00100=11111=-1 [E]=11011+00100=11111=1(这就是负-负=负+[负] 补 _{补} ,相当于左移一位)
(2)对阶 X:11 011 11 011000000 → 11 100 11 101100000

(3)尾数加减:
-Y:11 100 11 000101000
X-Y:11 100 10 110001000

(4)规格化
前面也讲过双符号位中10代表向上溢出,因此需要进行右规

11 101 11 011000100
(5)舍入
这里精度够,无需舍弃

(6)判断溢出
阶码正常,没有溢出

舍入用的方法:“0”舍“1”入法:类似于十进制数运算中的“四舍五入”法,即在尾数右移时,被移去的最高数值位为0,则舍去;被移去的最高数值位为1,则在尾数的末位加1。这样做可能会使尾数又溢出,此时需再做一次右规。

恒置“1”法:尾数右移时,不论丢掉的最高数值位是“1”还是“0”都使右移后的尾数末位恒置“1”。这种方法同样有使尾数变大和变小的两种可能。

强制类型转化

在这里插入图片描述
char→int→long→double
float→double
范围、精度从小到大,转换过程没有损失
32位
int:表示整数,范围 − 2 31   2 31 − 1 -2^{31}~2^{31}-1 231 2311,有效数字32位

float:表示整数及小数,范围 ± [ 2 − 126   2 127 ∗ ( 2 − 2 − 23 ) ] \pm [2^{-126}~2^{127}*(2-2^{-23})] ±[2126 2127(2223)],有效数字23+1=24位

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

知识点回顾

在这里插入图片描述

算数逻辑单元

算术逻辑单元由ALU和加法器构成

ALU

在这里插入图片描述
ALU需要接收信号(操作数),因此有端口 A i 、 B i A_{i}、B_{i} AiBi
ALU需要接收指令(知道做什么操作),因此有端口 K i K_{i} Ki
ALU需要输出结果,因此有端口 F i F_{i} Fi

在这里插入图片描述
这是ALU的实际图片,可以清晰的看出A、B是四位,S是用来控制,F是输出的,其余的用来辅助(做一些别的事)

逻辑符号

与 表达式: Y = A ⋅ B Y=A·B Y=AB(A、B相同时为1,不同时为2)

或 表达式: Y = A + B Y=A+B Y=A+B(A、B中有一个为1,就是1,全0是为0)

非 表达式: Y = A ‾ Y=\overline{A} Y=A(取反)

在这里插入图片描述
与、或、非的电路符号

虽然是基本知识,但是还是写一下
在这里插入图片描述
懒得打了,直接截图了,毕竟简单

今天的文章计算机组成第二章_计算机组成原理第六版课后答案分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/63484.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注