浮点型在计算机内存中的存储方式

浮点型在计算机内存中的储存方式

前言

浮点型和整型在计算机内存中都是以补码形式储存的,而浮点型为了表示小数,规范又和整型有所不同。

IEEE 754标准

  • IEEE二进制浮点数算数标准(IEEE 754)规定,任意一个二进制浮点数可以表示成如下形式:
    • ( − 1 ) S ∗ M ∗ 2 E (-1)^S * M * 2^E (1)SM2E
    • ( − 1 ) S (-1)^S (1)S表示符号位,S = 0,浮点数为整数,S = 1,浮点数为负数
    • M表示有效数字, 1 ⩽ M < 2 1 \leqslant M < 2 1M<2
    • 2 E 2^E 2E表示指数位。

float类型内存中储存占比

  • float类型在内存中占用4个字节,32个bit位,S、M、E所占bit位分布如下图。
    • float类型内存中储存形式.png
    • S占用1个bit位,E占用8个bit位,M占用23个bit位。

double类型内存中储存占比

  • Double类型在内存中占用8个字节,64个bit位,S、M、E所占bit位分布如下图。
    • double类型内存中储存形式.png
    • S占用1个bit位,E占用11个bit位,M占用52个bit位

指数E

  • E是一个无符号整数,float类型E的取值范围是0255,double类型E的取值范围是02047。为了表示负数,根据IEEE 754规定,E在存入内存前,需要加上中间数,float类型需要加上127,double类型需要加上1023。

特殊情况

  • 当E全为0
    • 有效数字M不再加上第一位的1,该数是个接近于0的数字。
  • 当E全为1
    • 如果有效数字M全为0,表示 ± \pm ±无穷大。

演示储存方式

  • 以7.5(float)距离

    • // 因为是正数,所以S为1
      // 7.5的二进制补码是:00000000 00000000 00000000 00000111.1
      // 按照IEEE 754标准转换:(-1)^0 * 1.111 * 2^2
      // S = 0, M = 1.111, E = 2+127 = 129
      
    • //补码就是:0 10000001 11100000000000000000000
      
    • 7.5内存中十六进制数据.png
    • 根据十六进制数据,可知以上计算是正确的。

浮点型数据在内存存储方式是按照IEEE 754标准进行存储的。IEEE 754标准规定了两种浮点数的表示方法:单精度浮点数和双精度浮点数。其,单精度浮点数占用4个字节,双精度浮点数占用8个字节。 在IEEE 754标准,浮点数的存储格式由三部分组成:符号位、指数位和尾数位。其,符号位用来表示浮点数的正负,指数位用来表示浮点数的数量级,尾数位用来表示浮点数的精度。 具体来说,单精度浮点数的存储格式如下所示: | 31 | 30 - 23 | 22 - 0 | |----|---------|--------| | S | E | M | 其,S表示符号位,占用1个bit;E表示指数位,占用8个bit;M表示尾数位,占用23个bit。双精度浮点数的存储格式类似,只是指数位和尾数位的长度不同。 在计算机,浮点数的存储方式是按照二进制补码进行存储的。具体来说,符号位用0表示正数,用1表示负数;指数位和尾数位都用二进制补码表示。 举个例子,如果要将3.14这个单精度浮点数存储计算机,首先需要将3.14转换成二进制数。具体来说,可以使用以下方法进行转换: 3.14 = 11.0010001111...(二进制) 然后,根据IEEE 754标准的规定,将上述二进制数按照符号位、指数位和尾数位的顺序存储计算机。具体来说,可以将上述二进制数转换成以下形式: | 0 | 10000000 | 10001100100011110101110 | |---|----------|------------------------| | S | E | M | 其,符号位S为0,表示正数;指数位E为10000000,表示指数为128(因为E需要加上一个固定的偏移量127,才能表示实际的指数值);尾数位M为10001100100011110101110,表示尾数为1.5707964(因为M需要除以2的23次方,才能表示实际的尾数值)。 因此,3.14这个单精度浮点数在计算机存储方式为: 01000000000100110010001111010111
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烛九_阴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值