float:
浮点型变量在计算机内存中占用4个字节(4 Byte),即32-bit,一个浮点数由2部分组成:底数m 和 指数e;
底数部分:使用2进制数来表示此浮点数的实际值;
指数部分:占用8bit即1byte空间来表示,表示数值范围:0-255;后面介绍 用于存储科学计数法中的指数部分,并且采用移位存储方式;
浮点数据就是按下表的格式存储在4个字节中:
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
- S部分: 表示浮点数正负,1为负数,0为正数。一位即可
- E部分:指数加上127后的值的二进制数(why是加上了127之后的值? 由于指数应可正可负,所以IEEE规定,此处算出的次方须减去127才是真正的指数。所以float的指数可从 -126到128.)
- M部分:24-bit的底数(底数部分实际是占用24-bit的一个值,由于其最高位始终为 1 ,所以最高位省去不存储,在存储中只有23-bit。)
- 特例:浮点数 为0时,指数和底数都为0,但此前的公式不成立。因为2的0次方为1,所以,0是个特例。这个特例也不用认为去干扰,编译器会自动去识别。
举例:看下float f = 97.0f;在计算机中存储的具体数据:0xc2 0xc2 0x00 0x00
二进制:1 10000101 1000010 00000000 00000000
S: 为1,是个负数。
E:(8-bit)为 10000101 转为10进制为133,133-127=6,即实际指数部分为6.
M:(23-bit)为 10000100000000000000000。底数实际上是:1.10000100000000000000000
现在,我们通过指数部分E的值来调整底数部分M的值。
调整方法为:如果指数E为负数,底数的小数点向左移,如果指数E为正数,底数的小数点向右移。小数点移动的位数由指数E的绝对值决定。
这里,E为正6,使用向右移6为即得: 1100001.00000000000000000
转换过程:小数点左边的1000010表示为 (1 * 2^6)+(1 * 2 ^ 5)+(1 * 2^0) =97 , 其结果为 97 。
小数点右边的 .0000000000000000 表示为0 ,其结果为.0 。
以