浮点数在计算机中的存储

浮点数在计算机中的存储(三)

三、IEEE754标准中float类型浮点数的存储

1、存储格式

float类型的浮点数在计算机中采用32位表示,具体如下:

1bit

8bit

23bit

s         e                   M

 

s:符号位

  s=0,则该浮点数为正。

  s=1,则该浮点数为负。

e:有偏移指数

M:尾数的小数部分  

 (因为二进制浮点数的标准形式都是1.xxxx *2e ,从中可以发现浮点数的整数位总是1,所以M段存储的其实是小数点后面的位数,不包含1)

 

2、有偏移指数与实际指数

(1)有偏移指数:e

   实际指数:E

(2)有偏移指数 = 实际指数 + 偏移值  (float类型的偏移值是:2 e-1-1 = 27-1 = 127 )

    即:e = E + 127

(3)范围问题

     在计算机中,float类型用8bit存储e(有偏移指数),所以e的取值范围如下:

二进制

十进制

0000 0000

0

0000 0001

1

0000 0010

2

……

……

1111 1111

255

 即:0 ≤ e ≤ 255

 因为 e = E + 127

 所以得出E的取值范围是:-127 ≤ E ≤ 128

 也即,float类型的浮点数,实际指数的取值范围为:-127 ≤ E ≤ 128

(注意:其中,-127和128被用来表示特殊值)

 

3、规约浮点数与非规约浮点数

(1)规约浮点数:

     偏移指数的取值范围是:0 < e < 255  (注意:没有等号了,因为0和255都在特殊值里)

     M的取值范围:000 0000 0000 0000 0000 0000 ~ 111 1111 1111 1111 1111 1111

     尾数的取值范围是:1 ≤ 尾数 < 2  (尾数的整数部分总是1)

 

(2)非规约数:
     偏移指数:e = 0  (注意:非规约数的偏移值为:126)

   M的取值范围:000 0000 0000 0000 0000 0001 ~ 111 1111 1111 1111 1111 1111  (M≠0)

     尾数的取值范围是:0 < 尾数 < 1  (尾数的整数部分是0)

(3)特殊值:

   e = 0, M = 0, 此时E = -127.   N = ±0

   e = 255, M = 0, 此时E= 128.  N =  ± 

   e = 255, M ≠ 0, 此时E= 128.  N不是一个数 

(4)小结

类别

符号位

指数域

尾数域

有偏移指数(十进制)

实际指数(十进制)

数值

绝对值最大规约数

0或1

1111

1110

111   1111  1111 

1111  1111  1111 

254

127

1.111……1*2127 

≈ 3.4*1038

绝对值最小规约数

0或1

0000

0001

000   0000  0000

0000  0000  0000

1

-126

1.0*2-126 

≈ 1.18*10-38

绝对值最大非规约数

0或1

0000

0000

111   1111  1111 

1111  1111  1111 

0

-126

0.111…1 *2-126 

≈ 1.18*10-38

绝对值最小非规约数

0或1

0000

0000

000   0000  0000

0000  0000  0001

0

-126

0.00…1 *2-126 

≈ 1.4*10-45

特殊值:±0

0或1

0000

0000

000   0000  0000

0000  0000  0000

0

-127

±0

特殊值:±

0或1

1111

1111

000   0000  0000

0000  0000  0000

255

128

± 

特殊值NaN

 

1111

1111

0000……1 ~ 1111……1

255

128

不是一个数

 

 

浮点数在计算机中的存储

上一篇:Linux系统概述


下一篇:【精品教程】Mina2.0快速入门与源码剖析PDF分享