当前位置:首页 > 内存 > 正文

浮点型在内存中的存储方式

  • 内存
  • 2024-05-30 03:03:41
  • 6078

一、float和double型分别怎么存储

C/C++中有两种类型的浮点字符:浮点型和双精度型。

浮点类型的大小为4字节,即32位。在内存中的存储方式如下:符号位(1位)指数(8位)尾数(23位)

double类型的大小为8字节,即64位,内存布局是这样的:符号位(1bit)指数(11bit)尾数(52bit)

符号位决定数字是正数还是负数,0为正,1为负。

指数和尾数源自二进制浮点数的科学记数形式。

比如浮点数2.5点10.1的二进制形式,转换成科学记数法的形式(1.01)*(10^1),可以看成是1的指数,。尾数(即小数部分的科学记数法)为01。

根据浮点数的存储标准(IEEE确认),浮点类型索引的起始数为127(二进制01111111),double类型索引的起始数为1023(二进制01111111111)。尾数直接填充。如果空间太多,则为0。如果空间不足,则将0舍入。因此,比率和双精度数分别以这种方式表示2.5(二进制):

符号位

指数

尾数

0

10000000000000000000000000

010000


0

10000000000

0100000000000000000000000000000000000000000000000000000


二、float型数据在内存中是怎么表示的浮点型数据按照国际标准IEEE754存储在内存中。
数字符号为1位二进制数,指数部分为8位二进制数(含指数代码),尾数部分为23位二进制数,总共32位二进制数。(和科学记数法一样,它传达数字的符号、有效数字和2的幂等信息。具体表示非常冗长,所以你应该阅读IEEE-754。)
简化形式的浮点数,尾数为有效数字;未简化形式的浮点数表示特殊值;示例:0、指数0、无穷大、指数2。减8的1次方,小数部分为0,NaN,指数减2的8次方1,小数部分非零,指数为1到...,小数部分任意。不规则格式,指数为0,小数部分非零。
数据示例:
零,井号0,实际指数-127,偏移指数0,指数域80秒,尾数域230秒
负零,井号1,实际值索引是:-127,偏移指数为0,指数字段有8个0,尾数字段有23个0
最大缩减数,井号为0或1,实际指数为-127,偏移指数为254,指数字段为11111110,尾数字段为23。