本是问一朋友关于Java与C/C++中浮点小数的表示的问题,没想到他好好的写了一篇blog来回答我的问题。呵呵,真的谢谢slimzhao(一笑)。
看了他的blog学到了很多,现再引用并总结一下,同时为了记忆。
浮点数格式中的各个部分:
对于float:共32个bits,Bit 31是MSB(Most Significant Bit),Bit 0是LSB(Least Significant Bit),则
Bit 31是符号位,接下来的8位是指数位,指数位被视为一个无符号的数,它与127的差就是以2为底的指数的部分。 最后的23位是小数部分。
而小数部分是这样规定的:
11001100110011001100110
这是0.9f 的小数部分,共23位,它表示:
1.11001100110011001100110
这样一个以2为基数的小数,小数点前面的1是隐含的,这是一个小技巧以获得额外的一位表示。所以上面的整个数是:
1 + (1/2+1/4) + (1/32+1/64) + (1/512+1/1024) + 1/(1024*8)+1/(1024*16) + 1/(1024*16*8)+1/(1024*16*16)
上