首页 > 其他 > 详细

让人纠结的浮点数问题

时间:2015-04-01 13:05:44      阅读:78      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!