Chinaunix首页 | 论坛 | 博客
  • 博客访问: 40189
  • 博文数量: 37
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 372
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-12 23:27
文章分类

全部博文(37)

文章存档

2014年(5)

2013年(32)

我的朋友

分类: C/C++

2013-10-13 01:11:32

浮点数可表示为S*M*(2^E),其中S为符号,+1或-1,M为底数,E为指数。
float在内存中占用32bits。32bits从高到低被分别用于表示S(符号,1bit),E(指数,8bits),M(底数,23bits)。如下所示。
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
以1.5f举例说明。其在内存中表示为:
0011 1111 1100 0000 0000 0000 0000 0000
S位为0,表示正数。(1则表示负数)
随后8bits用于表示指数,其值为127.需要用这个数减去127才表示指数的实际值。所以此处指数为0.(故float指数范围为-126~128.)
M部分的值为.100 0000 0000 0000 0000 0000, 前面需要加上1(1是默认省掉的),故M部分实际值为1.100 0000 0000 0000 0000 0000.
那么M*(2^E)便为1.5f.

0.0f在内存中32bits为全0.编译器将其当作一个例外处理。

阅读(422) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

7大爷2013-10-14 09:18:17

文明上网,理性发言...