float内存存储结构(共4字节,32位分别如下):
31 30 29----23 22----0
实数符号位 指数符号位 指数位 有效数位
其中实数符号位0表示正,1表示负;指数符号位1表示正,0表示负
float在计算机中的存储计算方法:
1. 先将这个实数的绝对值化为二进制格式,方法是:实数的整数部分是除2取余和小数部分是乘2取整
2. 将这个二进制格式实数的小数点左移或右移n位,直到小数点移动到第一个有效数字的右边。
3. 从小数点右边第一位开始数出二十三位数字放入第22到第0位。
4. 如果实数是正的,则在第31位放入“0”,否则放入“1”。
5. 如果n 是左移得到的,说明指数是正的,第30位放入“1”。如果n是右移得到的或n=0,则第30位放入“0”。
6. 如果n是左移得到的,则将n减去1后化为二进制,并在左边加“0”补足七位,放入第29到第23位。如果n是右移得到的或n=0,
则将n化为二进制后在左边加“0”补足七位,再各位求反,再放入第29到第23位。
根据上面那个步骤得:
(1). 23.172001二进制形式为:0001,0111.0010,1100,0000,1000,0100,0001....
(2)左移4位得:1.0111.0010,1100,0000,1000,0100,0001
(3)取小数点后23位得: 0111.0010,1100,0000,1000,010(这23位为float数二进制码的后23位)
(4)第31位: 0
(5)第30位: 1
(6)左移4位,4的二进制0011,不足7位则:0000,011
最后得23.172001在计算机中的二进制表现形式为:0100,0001,1011,1001,0110,0000,0100,0010
二进制转16进制得:41A96042
@import url(http://www.cppblog.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
From: http://topic.csdn.net/u/20111217/19/6c5221d6-a779-4e6c-9eb0-72949857dc6e.html?95401