码迷,mamicode.com
首页 > 其他好文 > 详细

让人纠结的浮点数问题

时间:2015-04-01 13:08:46      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:

最近,遇到了一个浮点数的问题,

代码:
fld dword ptr ds:[esi+1E4]

而esi+1E4 = 02FCE9D4,

下面是他的内存:
02FCE9D4  00 C0 2B 45 00 C0 2B 45 00 00 00 00 00 00 00 00  .?E.?E........

而执行后,ST0 = 2748.00000000000

我想知道ST0 怎么就等于2748的?

 

分析如下:

说来说去,还是浮点构成的问题,根据IEEE 标准中,第一bit位为符号位,随后的8bit是指数为,剩下的23bit是底数位,考虑到是小端存储,00 C0 2B 45的数字的值为 452BC000,也即是:
   0100 0101 0010 1011 1100 0000 0000 0000
第一bit是0,说明是正数,
随后的8bit,也就是10001010 , 8A,换算成十进制是138 ,138 - 127 = 11 , 说明指数为11位
而剩下的23位值为:010 1011 1100 0000 0000 0000 , 首bit补齐省略的1, 值为:
1010 1011 1100 0000 0000 0000 , 指数11位说明,小数点的位置为:
1010 1011 1100 .  0000 0000 0000 , 换算为16进制为ABC.000, 换算成10进制,也就是2748.00000000

让人纠结的浮点数问题

标签:

原文地址:http://www.cnblogs.com/stabber/p/4383324.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!