分类: C/C++
2008-06-15 10:51:38
|
运行如下:
解释如下:
浮点数的存储格式:
浮点数的存储格式是符号+阶码(定点整数)+尾数(定点小数)
SEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM
即1位符号位(0为正,1为负),8位指数位,23位尾数位
浮点数存储前先转化成2的k次方形式,即:
f = A1*2^k + A2*2^(k-1) + ... + Ak +... +An*2^(-m) (Ai = {0, 1}, A1 = 1)
如5.5=2^2 + 2^0 + 2^(-1)
其中的k就是指数,加127后组成8位指数位
5.5的指数位就是2+127 = 129 = 10000001 (本来是128,为了方便,IEEE规定为127,双精度为1023,我查资料后得出的结论,不知道对不对。)
A2A3.....An就是尾数位,不足23位后补0
所以5.5 = 01000000101000000000000000000000 = 40A00000
所以,对浮点数*2、/2只要对8位符号位+、- 即可,但不是左移、右移
《深入理解计算机系统》第二章中的浮点数存储问题,下面就列一个小事例。
更多请看:
http://blog.chinaunix.net/u/19782/showart_229061.html
http://www.mcu123.com/new/Article_Show.asp?ArticleID=10
http://blog.csdn.net/dreamXren/archive/2005/11/25/536902.aspx