浮点数的机器码表示
概念
在机器中表示一个浮点数时,包含三个部分
按IEEE754标准,32位浮点数和64位浮点数的标准格式为
示例:
讲解概念太难以理解了,直接用一个例子来讲解这三部分怎么表示一个浮点数吧。
一个单精度浮点数机器码:01000001010001100000000000000000 对应的浮点数是多少?
要解析一个单精度浮点数(float
)的机器码,我们需要根据IEEE 754标准来解读。单精度浮点数使用32位表示,分为三个部分:
- 符号(Sign):第31位(最左边的一位),0表示正数,1表示负数。
- 指数(Exponent):第30到23位,共8位,需要减去偏置值(bias)为127表示实际的指数值。
- 尾数(Mantissa/Fraction):第22到0位,共23位,表示小数部分。在IEEE 754标准中,实际上存在一个隐含的前导1(即二进制科学计数法中的1.xxxx形式)。
解析步骤
-
符号位:
- 第31位是
0
,所以这是一个正数。
- 第31位是
-
指数位:
- 第30到23位是
10000010
,转换为十进制是 130。 - 实际的指数值需要减去偏置值127,因此实际指数 = 130−127=3。
- 第30到23位是
-
尾数位:
- 第22到0位是
10001100000000000000000
。 - 在IEEE 754中,这个值前面有一个隐含的1,因此真正的尾数是
1.10001100000000000000000
。
- 第22到0位是
计算最终值
将这些信息组合起来,我们得到的二进制表示是:
Value=(−1)^sign×1.fraction×2^exponent
代入具体数值:
- 符号(Sign)=
0
→ 正数 - 尾数(Fraction)=
1.10001100000000000000000
- 指数(Exponent)=
3
所以,
Value=1 × 1.10001100000000000000000 × 2^3
(注意 : 1.10001100000000000000000 是二进制的表示)
接下来,将该二进制数转换为十进制:
1.10001100000000000000000 = 1.100011
=1+1/2+1/32+1/64
=1+0.5+0.03125+0.015625
=1.546875
然后乘以 2^3=8
1.546875×8=12.3751.546875×8=12.375