浮点数float、double存储方式

浮点数由三部分组成,如下图,符号位s、指数e和尾数m。

S: 表示浮点数正负,1为负数,0为正数

E: 8位以2为底,阶码=阶码真实值+127(0111 1111)

M: 23位,存储小数点左边的数据,右边的最高位被隐藏,规格化被隐藏的是1,非规格化被隐藏的是0

 

17.625换算成二进制位:10001.101  ( 0.625 = 0.5+0.125) ;再将 10001.101 向右移,直到小数点前只剩一位10001.101=1.0001101 x 24

S=0E=127(0111 1111)+4(0000 0100)=1000 0011M=0001 101(因为规格化小数点前必为1,所以IEEE规定只记录小数点后的就好,所以此处底数为  0001101 

综上所述,17.625 float 存储格式就是:

0 1000 0011 0001 1010 0000 0000 0000 000


阶码真实值的取值范围是-126+127。阶码=阶码真实值+127,即:1<=阶码<=254。阶码占8位,可以表示02550255十分特殊。

1、当E=255

     1.1 M全为0时,则表示无穷大,若S1则为负无穷大,若S0则为正无穷大。

     1.2 M不全为0时,表示NaN(Not a Number)

2、当E=0

    2.1 M全为0时,表示的真值为0,结合符号位S 01,有正零和负零之分。

   2.2 M不全为0时,表示非规格化小数。这种情况下,阶码真实值为-126,不是0-127=-127。小数点左边隐藏的最高位是0,   不是1

 

注:浮点数不存在原码、反码、补码 概念。因此会出现正零和负零。


double类型和float类型是理解方式是一样的,只是占的位数不一样。



猜你喜欢

转载自blog.csdn.net/hong10086/article/details/79758656