学习笔记:计算机组成原理Ch2.数据存储

本章主要介绍补码、IEEE754标准。

可以由下面链接得到知识

冯文斌:浮点数的二进制表示(IEEE 754标准)关于编程哪些事:原码、反码、补码 详解!不懂的请看过来!

先讲解一下补码:(two’s complement):

补码的 产生的由很多元素导致的,一开始,人们用机器码表示数字,也就是在最高位放一个Sign,1表示负,0表示正。

但是发现,只有正数相加,如果相减就完犊子了

秉持着一种把减法变成加法的理念,就把负数的除Sign位变成了反数,看起来就ok了,但是发现,自己减自己能出来个-0

如是,就想到了新的编码,补码,其实就是在反码的基础上+1,这样就杜绝了-0的出现,于是-0位就可以多表示一个数,岂不是美滋滋。

之后讲解IEEE 754:

045_001.jpg

如上图所示:

32位由三部分组成:

  • Sign
  • Exponent
  • Significand

看了往年考试题,一般老师会给个16进制的数,如 7FF00000

对于这种情况,先把他转化成32位的二进制数:

可以看下面的转化表:

十六进制 二进制
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111

那么原题目就转化为了,0111 1111 1111 0000 0000 0000 0000 0000

先来看第一位sign位:0

之后是Exp位:11111111

之后是Significance:111000000000000

那么就变成了:

$$(-1)^{0}\times2^{255-127}\times 1.111000000…$$

注意上面1.1110000是二进制小数

$$2^{128}\times 1.111000000…$$

那么最后就是:

$$2^{128}+2^{127}+2^{126}+2^{125}$$

之后我们再来看看,这个32位能表示的最大和最小的数:

如图,exponent 最大是254,signfinicant最大是1.11111111111111111111111

我们姑且把significant看作2,那么就是:

$$2^{254-127}\times2=3.4\times10^{38}$$

同理:最小的规格化正数,因为至少要留一位小数,所以exp最小就是1了,significant得小,就是1.000000000000000000

于是就有了:

$$2^{1-127}\times1.0000..$$ 也就是:

$$1.0\times2^{-126}==1.18\times10^{-38}$$

relative error就是:

$$2\times2^{-24}$$

045_002.jpg

同样的:

64位:

045_003.jpg045_004.jpg

特殊情况,看到就不用算了:

  • 0:exp位全是0,并且实数位也全是0
  • Infinity:exp位全是1,并且实数位全是0
  • NaN:exp位全是1,实数位不全是0

总结:如果exp位置出现了全是1,就不用算了

如果exp位置出了全是0,看看后面是不是也全是0.

下面再说一下,如何压缩数据:

香农定理告诉我们一个symble需要的最少比特:

045_005.jpg

有两种压缩方式:

Huffman Coding:

主要适合不同长度的编码,Zip就是这样

Source coding:

主要是适合有损失的压缩,去掉细节。


学习笔记:计算机组成原理Ch2.数据存储
https://yiyuwang.be/2021/01/06/2021-01-06-342425356/
作者
StevenWong
发布于
2021年1月6日
许可协议