计算机组成原理

计算机组成原理

第二章 计算机系统中的数据表示

一)数值数据的编码

1、补码

1)补码概念引入

image-20230402192509149

image-20230402192600936

image-20230402192637492

2)补码的定义

image-20230402192814564

计算机中的浮点数是以纯小数和纯整数部分构成的,所以要表示一个浮点数只需要知道它的小数部分和整数部分怎么表示。

n位二进制纯小数的编码由一位整数位(也是符号位),和n-1位小数位组成,如1.1100111,0.0000111。其中整数位的0和1是符号位,0表示正数,1表示负数。对一个二进制数来说,它的模等于它的所有有效位都为1时给末位再加1,定点小数的模(以八位为例)1.1111001的模就为10.0000000也就是2。在这里的符号位也算作有效位。其实总结来说,对于n位二进制整数来说,它的模就等2^n。而二进制纯小数的模就是2。

image-20230403184942774

补码相较于原码来说0是唯一的,所以补码可以表示2^n个数。

image-20230403185919710

最小的负数的补码比较特殊,它的最高位既是符号位也是数值位。

3)补码的性质

image-20230403190957769

image-20230403191015315

image-20230403191042387

image-20230403191112054

真值-->补码

image-20230403191205340

image-20230403191221250

补码-->真值

image-20230403191416414

image-20230403191615466

简化方法:

image-20230403191750087

image-20230403192118714

image-20230403192327743

image-20230403192930173

image-20230403193738708

image-20230403193808568

image-20230403193933715

image-20230403194054468

image-20230403194138281

image-20230403194520704

image-20230403194631835

image-20230403194733331

image-20230403195122152

image-20230403195416514

image-20230403201807933

image-20230403202157428

溢出说明已经超出了表示范围

image-20230403202246671

2、反码(计算机中不使用)

1)反码的定义和表示

image-20230403203057076

反码和补码的区别就是反码不需要末尾加一。

2)反码的性质image-20230403203436965

3、移码

1)移码的引入

计算机中的浮点数的组成为:image-20230403204902587

当我们在比较两个浮点数时,在符号相同的情况下,我们先比较阶码的大小,当阶码一样时再去比较尾数,并且我们希望从阶码的高位向低位依次去进行比较。但是如果用原码或者补码来表示阶码,就会存在一个问题:负数的符号 位是1,正数的符号位是0,因此负数的符号位总是大于正数的符号位,这不利于我们从高位向低位依次的进行浮点数比较,而通过转换的方法又很麻烦,所以我们干脆设计一种新的编码,我们希望这种编码值和真值之间是线性正比的关系。

2)移码的表示

image-20230403205557179

image-20230403210208235

image-20230403210225805

3)移码的性质

image-20230403210453690

image-20230403210627496

二)数据的浮点表示

1、浮点数在计算机中的表示

image-20230406163801369

image-20230406164654325

现在的计算机阶码的底默认都是2。

2、规格化的浮点数

计算机中采用的是二进制,因此尾数的表示也是二进制,类比于十进制的科学计数法,我们要对二进制进行一个规格化的处理。对于浮点数的尾数来说,它的第一位也就是整数位肯定必须要是0,而小数位的第一位要是1。原因就是如果一个尾数是0.0001110,那么小数部分的前三个0很明显会造成数值位的浪费,我们可以让他改进成0.11100000然后让它的阶码减3。总而言之,计算机中的浮点数需要被规格化,规格化之后需要满足原码为S.1XXXXXX(S为符号位),也就是小数位的第一位必须为1。

image-20230406170108102

image-20230406170146224

注:一般来说,计算机中浮点数的尾数使用原码表示,阶码使用移码表示。但是实际做题时题目可能会要求尾数用不同的编码表示,原码表示相对比较简单, 因此我们做出尾数用补码表示的情况。

尾数用原码表示和尾数用补码表示两种方法尾数真值取值范围的对比:

image-20230406171754556

目前存在的一个问题:无法表示浮点数的0,只能表示一个十分接近0的数。后面IEEE754标准会解决这个问题。

image-20230406173106257

image-20230408141230827

image-20230408141311621

image-20230408143728013

关于为什么需要两个符号位,这是称之为变形补码,在计算机运算过程中为了防止溢出会有这种形式,但是运算结果只能是一个符号位。

3、浮点数的特点

虽然浮点数的表示范围相对于定点数要大得多,但是一定的位数能表示的数字个数是有限的,比如一个32位的数,它只有-231~231-1这232种组合,也就是不管定点数还是浮点数最多只能表示232个。

image-20230408145149684

浮点数在数轴上的分布特点:离原点越近,分布越密,离原点越远,分布越稀。但两个相邻的2的整数次幂之间的数的分布是均匀的。

容易想到,定点数在数轴上应该是均匀分布。

image-20230408151051022

image-20230408153738791

image-20230408153945074

image-20230408154729387

image-20230408154740472

image-20230416152846977

4、IEEE754标准

image-20230416153112831

image-20230416154355309

移码偏移量和之前不一样是为了正数比负数多一个数,从而在执行倒数运算时不会产生上溢,比如一个数的-126次方的倒数会有正的126次方与之对应。而下溢很好处理,可以近似为0,也可以使用非规格化数来表示。

image-20230416155707118

image-20230416160502291

image-20230416161215270

image-20230416161217688

image-20230416161317793

image-20230416161425774

image-20230416161519967

只有需要舍的数正好为5时这样舍入,其他如1.3、1.8还是按照四舍五入。

image-20230416161644102

对于二进制来说就近舍入碰到“5”这种情况也就是留下的最后一位舍入后应为0

image-20230416162005883

image-20230416162058020

image-20230416162730007

image-20230416162753075

image-20230416162924884

image-20230416163311299

image-20230416164142336

image-20230416164454483

IEEE754标准下float只有23位尾数,可以表示最多24位的尾数,对应的最大值对应十进制应该时24lg2约等于7.所以上面程序中的数字只有前七位是准确的,后面两位不准确。

image-20230416164706284

0.22和0.11在转换成单精度浮点数时会有精度损失。

三)二进制编码的十进制数

image-20230416165409212

image-20230416165615993

image-20230416165821189

image-20230416165929156

四)非数值数据的编码

image-20230416170417203

image-20230416170426287

image-20230416170925943

前两种是两个字节表示。

image-20230416171254918

image-20230416171608759

常用字用两个字节表示,生僻字用四字节表示。

五)检错与纠错码

image-20230416172452555

image-20230416172633500

1、奇偶校验码

image-20230416172717850

image-20230416172723776

image-20230416172727530

image-20230416172913739

image-20230416173059203

image-20230416173318414

也可以发现三位错误,但不能发现四位。

2、循环冗余校验码(CRC)

image-20230416173451600

image-20230416173521087

image-20230416174311374

image-20230416174556416

image-20230416174620917

image-20230416174939400

image-20230416174944418

3、海明码

image-20230416175006239

image-20230416175115737

image-20230416175256277

image-20230416181105937

海明码可以检测1或2位错误,只能纠正一位错误。

image-20230416181215618

image-20230416181232890

image-20230416182159627

posted @ 2023-04-19 14:04  Athonal0  阅读(230)  评论(0)    收藏  举报