Chinaunix首页 | 论坛 | 博客
  • 博客访问: 662565
  • 博文数量: 137
  • 博客积分: 7000
  • 博客等级: 少将
  • 技术积分: 1335
  • 用 户 组: 普通用户
  • 注册时间: 2005-11-23 15:18
文章分类

全部博文(137)

文章存档

2010年(2)

2009年(2)

2008年(2)

2007年(30)

2006年(99)

2005年(2)

我的朋友

分类: C/C++

2006-04-15 20:04:52

已知:整数3490593(16进制表示为0x354321)。
求:其对应的浮点数3490593.0的二进制表示。
 
解法如下:
先求出整数3490593的二进制表示:

 H:    3     5    4    3    2     1  

 B:   0011  0101 0100 0011 0010  0001

        │←──────21─────→│

即: 

               1.1010101000011001000012×221

可见,从左算起第一个1后有21位,我们将这21为作为浮点数的小数表示,但IEEE规定的单精度浮点数float由符号位1位,指数域位k=8位,小数域位n=23位构成,因此对上面得到的21位小数位我们还需要补上2个0,得到浮点数的小数域表示为:
         [1 0101 0100 0011 0010 0001 00]
 
float类型的偏置量Bias=2k-1-1=28-1-1=127,但还要补上刚才因为右移作为小数部分的21位,因此偏置量为127+12=148,就是IEEE浮点数表示标准:
                          V = (-1)s×M×2E
                    E = e-Bias
中的e,此前计算Bias=127,刚好验证了E=148-127=21。
 
将148转为二进制表示为[10010100],加上符号位0,最后得到二进制浮点数表示[1001010010101010000110010000100],其16进制表示为:
 H:     4        A       5          5         0         C         8        4  
 B:  0100   1010   0101    0101   0000   1100  1000   0100
                             │←────21─────→│
     1│←─8─→|  ←─────23─────→│
 
这就是浮点数3490593.0(0x4A550C84)的二进制表示。
 
阅读(8655) | 评论(18) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-09-22 16:25:27

懂了,谢谢。

chinaunix网友2008-09-22 16:25:27

懂了,谢谢。