参考:c语言中float、double、long double在内存中存储方式

浮点型变量在计算机内存中占用4个字节(4 Byte),即32-bit,一个浮点数由2部分组成:底数m  和 指数e;

底(尾)数部分:使用2进制数来表示此浮点数的实际值;

指数部分(E):占用8=bit空间来表示,表示数值范围:0-255;后面介绍 用于存储科学计数法中的指数部分,并且采用移位存储方式;(2^E)

具体分析:

  浮点数据就是按下表的格式存储在4个字节中:

  Address+0 Address+1 Address+2 Address+3 Contents

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
double
计算机组成原理中的二进制

(因为最终结果要减去127,所以在4的基础上要加上127)

补充说明