EDN首页   博客首页

日志档案

发表于 2006-12-30 9:18:59

3

标签: 无标签

浮点数表示方法

PS:真是学的不如忘的快,今天用到了,竟然都忘光了,所以就整理了一下

单精度浮点数有32位,双精度浮点数有64位,扩展浮点数有80位。

在单精度浮点数中,主要有符号位(S)、指数(E8位、尾数或者小数部分包含后面的23位。
共计32位,折合4字节
由最高到最低位分别是第313029……0
31
位是符号位,1表示该数为负,0反之。
30-23
位,一共8位是指数位。
22-0
位,一共23位是尾数位。

现在让我们按照IEEE浮点数表示法,一步步的将float型浮点数12345.0f转换为二进制代码。在处理这种不带小数的浮点数时,直接将整数部转化为二进制表示:1 11100010 01000000然后将小数点向左移,一直移到离最高位只有1位,就是最高位的11.11100010010000000一共移动了16位,在布尔运算中小数点每向左移一位就等于在以2为底的科学计算法表示中指数 1,所以原数就等于这样:1.11100010010000000 * ( 2 ^ 16 )好了,现在我们要的尾数和指数都出来了。最高位的1一般就直接省去了

这样尾数的二进制就变成了:11100010010000000最后在尾数的后面补0,一直到补够23位:11100010010000000000000

再回来看指数,一共8位,可以表示范围是0 - 255的无符号整数,也可以表示-128 - 127的有符号整数。但因为指数是可以为负的,所以为了统一把十进制的整数化为二进制时,都先加上127,在这里,我们的16加上127后就变成了143,二进制表示为:10001111
12345.0f
这个数是正的,所以符号位是0,那么我们按照前面讲的格式把它拼起来:

S      E           F
0   10001111   11100010010000000000000
例子2:把浮点数转化为十进制数

S      E           F

1   10010001    10001110001000000000000

符号位是1 偏移指数 10010001145 最后的指数实际为14512718

最后的结果就为(-1)(1.10001110001)(2^18

因为指数在-126+128之间的任意数,所以极大的和极小的都可以表示出来。

浮点数的这两种格式有两种例外:数0.0由全0来表示,而无穷大数的指数则由全1来表示,尾数用全0来表示。

  IEEE754三种浮点数的格式参考
          
数符(s)  阶码(E)   尾数(M)      总位数      十六进制      十进制            
短实数
        1        8         23             32           7FH          127      1~254       
长实数
        1       11       52              64           3FFH         1023      1~2046       
临时实数      1      15       64             80           3FFFH        16383      1~32766       

    

 

 

参考文献:http://it.icxo.com/htmlnews/2004/09/01/314496.htm

http://www.lwlm.com/show.aspx?id=26385&cid=25

 

系统分类: 资源共享   |   用户分类: 计算机基础   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(1517)    回复(2)  

投一票您将和博主都有获奖机会!

最新评论

  • 2007-10-24 20:03:36

    这样的帖子得  顶

  • 张伟韬

    2008-4-7 13:54:48

    非常好,比老师讲的还易懂