标签:
最近,遇到了一个浮点数的问题,
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