整数与浮点数在内存中的储存

        由于内存中存储数据时只会储存二进制数,在储存整数时,需要考虑的仅仅是整数是否会过大而溢出内存,而在储存浮点数的时候则需要考虑浮点数的精确度,那么在精确度和浮点数所占空间内存之间就需要做出取舍。

一、整数的储存

        正如前文所说,整数的储存仅需要考虑整数是否会过大而溢出内存,例如,一个短整型24个字节而每个字节是8个二进制位,对于一个无符号的短整型来说,可以储存的最大的数就是2^16-1,大于这个数就会发生数据丢失,这时就可以使用无符号整型来储存这个更大的数。同样的道理8个字节的无符号长整型就能用来储存大于2^32-1的数字。

二、浮点数在内存中的储存

        浮点数则不仅需要考虑数的大小还需要考虑数字的精确度,且因为二进制表达小数时,会存在二十多个二进制小数位都不能精确表达的情况,因此需要做出一些取舍。这也导致浮点数的储存与整数的储存是不同的。

IEEE 754规定:

对于32位的浮点数,最高的1位存储符号位S,接着的8为存储指数E,剩下的23位存储有效数字M对于64位的浮点数,最高的1位存储符号位S,接着的11为存储指数E,剩下的52位存储有效数字M

那么这里的S、E、M分别代表什么呢,这里我们需要用到一个公式:

V = (-1)^{S}*M*2^{E}

V表示我们想要存储的浮点数,S表示符号位(当S=0时,V为正数;S=1时,V为负数),M表示有效数字(1<=M<2),E则表示2的E次方。

任何的浮点数都可以通过这个公式以等号右边的形式表达出来,而有效数字被称为有效数字的原因也显而易见了,因为有效数字的长度就决定了后面的表达式对浮点数表达的精确度,当M无限长的时候对浮点数的表达就必然是精确的,但是同样的需要付出的储存空间就让人无法接受。因此,有了IEEE 754规定,这样就能在存储空间与浮点数的精确度直接做到一个较好的平衡。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值