IEEE754标准表示浮点数(详解)
目录
1.IEEE754标准格式
在IEEE 754 格式浮点数分 3 个类型的浮点数:分别是 短浮点数 float,长浮点数 double,临时短浮点数 long double,由 3 个部分组成,分别是 符号码,阶码,尾数码,对应部分所占位数,如图所示:
2.IEEE754标准中的符号码
S是浮点数的符号位,占1位,安排在最高位,S=0表示正数,S=1表示负数。
3.IEEE754标准中的阶码
在 IEEE 754 浮点数标准中,阶码是用移码表示的,移码的定义:移码 = 真值 + 偏置值;
- 普通情况下,移码的偏置值为 2^(n-1), 8 位的移码的偏置值为 2^(8-1) = 128D = 1000 0000B;例如:-127D = -0111 1111B , 其移码为 -0111 1111 + 1000 0000 = 0000 0001;
- 在 IEEE 754 标准中,移码的偏置值是 2^(n-1)-1,8 位的移码的偏置值为 2^(8-1)-1 = 127D = 0111 1111B;
例如:-126D = -0111 1110B ,其移码为 -0111 1110 + 0111 1111 = 0000 0001
注意:8 位中,-127D 和 128D 这 2 个阶码有特殊用途,一般不在正常讨论范围(-126~127),他们的移码分别是:
- -127D:-0111 1111 + 0111 1111 = 0000 0000;
- 128D:1000 0000 + 0111 1111 = 1111 1111;
4.IEEE754标准中的尾数
在 IEEE 754 浮点数标准中,尾数码部分采用原码表示,且尾数码隐含了最高位 1,在计算时我们需要加上最高位1,即 1.M,我们通过一个例子来表示:
例如:有一个浮点数,真值为 0.11B ,那么其简略版的 IEEE 754 标准表示为(忽略 符号码 和 阶码):
S(1) E(8) 100 0000 0000 0000 0000 0000
即当 0.11B 这个数在记录为 IEEE 754 标准浮点数时,会这样处理,令 0.11 = 1.1 * 2^(-1) ,尾数码是 1.1000…,然后隐含最高位1,即 1 .1000…。
5.IEEE754标准的真值计算
在上述内容的分析之后,再通过观察分析以下这个 IEEE 754 单精度浮点数格式表示的数,系统性了解如何计算出 IEEE 754 标准浮点数的真值:
1 100 0000 1010 0000 0000 0000 0000 0000
上数分别对应图1-1的中 S(符号码,0 正,1 负),E (阶码) ,M (尾数数值)为:
- S(红色部分):1
1,表示这个浮点数是个负数;
- E(蓝色部分):10000001
100 0000 1,阶码,其真值为 :移码 - 偏置值 => 1000 0001 - 0111 1111 = 0000 0010 = 2D;
- M(黑色部分):010 0000 0000 0000 0000 0000
010 0000 0000 0000 0000 0000 表示这个浮点数的尾数部分,其真值为:被隐含的最高位1 + 0.尾数部分 => 1 + 0.01 = 1.01B;
通过对 S,E,M 的分析,我们可以计算出该浮点数的真值,即:
-1.01B * 2^10B = 1.25D * 2^2D = -5.0D或 -1.01B * 2^10B = -101.0B = -5.0D
6.十进制转化成IEEE754标准浮点数
同样地再用一个例子 十进制数转为 IEEE 754 浮点数的例子,加深对 十进制数 与 IEEE 754 浮点数之间的转换的理解。
例如:将十进制数 -0.75 转为 IEEE 754 的单精度浮点数格式表示,分析过程如下:
过程A: -0.75D = -0.11B = -1.1B * 2^(-1B)
- S:1
-0.75 为负数,故 S 符号码为 1
- E:0111 1110
由 过程A 得,阶码的真值为 -0000 0001 ,其移码为:-0000 0001 + 0111 1111 = 0111 1110
- M:100 0000 0000 0000 0000 0000
由 过程A 得,尾数码真值为:-1.1,隐含最高位 1 ,取小数部分,得100 0000 0000 0000 0000 0000
最终结果为:
1 011 1111 0100 0000 0000 0000 0000 0000
7.IEEE754标准浮点数的范围
最小绝对值
IEEE 754 单精度浮点型表示的的最小绝对值:尾数码全为 0 ,阶码真值为 -126D(对应的移码为 0000 0001B),此时整体的值为 1.0B * 2^(-126D)
最大绝对值
IEEE 754 单精度浮点型表示的的最大绝对值:尾数码全为 1 ,阶码真值为 127D(对应的移码为 1111 1110B),此时整体的值为 1.111…B * 2^(127D
关于阶码真值为 -127 和 128
一般我们正常探讨的阶码区间是 -126D ~ 127D,而真值 -127D 的阶码为 0000 0000B,真值 128D 的阶码为 1111 1111B。
阶码真值为 -127
当阶码全为 0 ,尾数不全为 0,表示 非规格化小数 ,用来表示比最小绝对值还要小的数,即
尾数码 隐含的最高位不是 1,而是 0;
阶码真值 固定为 -126,而非 -127;
当阶码全为 0 ,尾数全为 0,表示 真值 +/- 0 ;
阶码真值为 128
当阶码全为 1 ,尾数全为 0,表示 正负无穷大 +/- ∞
当阶码全为 1 ,尾数不全为 0,表示非数值 NaN(Not a Number)
更多推荐
所有评论(0)