理解浮点数,用IEEE 754 标准表示浮点数,存储浮点数

浮点数通常可以用来表示任意一个实数。

具体表示格式,如下:

浮点数 = 尾数 * 基数阶码

N = M * r E(其中尾数是一个规格化的纯小数)

看到这个表达方式大家应该很熟悉,仔细看一下这不就是科学计数法吗?科学计数法基数是10,这个表示基数是 2而已。

举个例子:

二进制表示成类似科学计数法的浮点数:11100.101 = 1.1100101 * 24

十进制表示成科学计数法格式:28.625 = 2.8625 * 101

电脑当然不能直接存了,在电脑中的存放格式为:

数符 阶符 阶码 尾数

阶符 阶码 数符 尾数

其中;数符为 尾数的符号,阶符为 阶码的符号。

IEEE 754

在IEEE 754 标准中:

在这里插入图片描述

规格化数:+/- 1.xxxxxxxx2 * 2E(其中指数位用移码表示,有效位用原码表示)

规格化尾数总是将最高位规格化为1,无需记录在存储格式中,隐含表示

单精度浮点数计算公式:(-1)S * (1 + 有效位) * 2(阶码-127)
双精度浮点数计算公式:(-1)S * (1 + 有效位) * 2(阶码-1023)

单精度存储格式:

符号位 阶码 有效位
1 bit 8 bit 23 bit

共占32 bit位;

移码的偏置值为127;

规格化阶码范围为:0000 0001(1)~1111 1110(254),全0和全1用来表示特殊值!

阶码 有效位 表示位
0 0 +/- 0
0 非零 无效值
1-254 有效值 有效值
255 0 +/- 无穷
255 为零 非数

双精度存储格式:

符号位 阶码 有效位
1 bit 11 bit 52 bit

共占64 bit位,移码的偏置值为1023

举个例子:

将 -12.75 转换为二进制表示:

不用管符号位,因为 IEEE 754 是将符号专门存储起来的

第一步将整数部分 12=1100B
第二步将小数部分 .75=.11B
第三步将数规格化 1100.11=1.10011 * 23
注意这里的3是 x - 127 = 3
所以 x = 130 = 127+3=128 + 2 =1000 0010B

最终存储为:

1 1000 0010 100 1100 0000 0000 0000 0000

用十六进制表示为: C14C0000H

猜你喜欢

转载自blog.csdn.net/weixin_44223946/article/details/110198977