整数和浮点数在内存中存储

在计算机的内存当中,整数和浮点数的存储方式可谓是大相径庭

这篇文章整理了关于整数在内存中的存储,以及较为复杂的浮点数在内存中的存储 ,希望能够帮到大家,望多支持!!!

目录

1.整数的存储

2.浮点数的存储

浮点数存的过程 

浮点数取的过程


 

 

1.整数的存储

整数在内存中以二进制的形式存储,存储的是其补码。要清楚这点,我们需要知道三个概念:

  • 原码:就是整数直接转化为二进制的形式。
  • 反码:符号位不变,其他位按位取反。
  • 补码:反码加一得补码。

三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位最 高位的⼀位是被当做符号位,剩余的都是数值位。

要注意:

  • 对于正数:原码,反码,补码都相同!
  • 对于负数:原反补符合以上规则。

举个例子: 

15  原码 00001111

      反码 00001111

      补码 00001111(都相同)

-15 原码 10001111

      反码 11110000(符号位不变,其他位按位取反)

      补码 11110001 (反码加一)

2.浮点数的存储

首先,任意⼀个二进制浮点数V可以表示成下面的形式: V   =  (−1)^S * M * 2^E

  • (−1)^S 表示符号位,当S=0,V为正数;当S=1,V为负数 
  • M 表示有效数字,M是大于等于1,小于2的
  • 2^E 表示指数位 

举个例子:

十进制的6.0,写成二进制是 110.0 ,相当于 1.10×2^2 。 那么,按照上面V的格式,可以得出S=0,M=1.10,E=2。

十进制的-6.0,写成二进制是 -110.0 ,相当于 -1.10×2^2 。那么,S=1,M=1.10,E=2。 

IEEE 754规定:

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

对于64位的浮点数(double),最高的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M 。

32位浮点数存储如下图所示:

632517761d9b4f96874bddf0506fa594.png

浮点数存的过程 

 IEEE 754 对有效数字M和指数E,还有一些特别规定:

1.对于有效数字M:

我们知道M的取值范围是大于等于1,小于2,所以M的个位就是1,既然如此,我们就可以不用存储这个1,直接存储后面的小数,等到读取的时候再将1加上。这样能够存储的有效数字就从23位变成了24位。

2.对于指数E:

一定要清楚,E是个无符号整型!

但是对于科学计数法来说,指数位可能会出现负数,为了让E保持为正,计算机在存储E的时候会先加上一个中间数再存进去。

对于32位浮点数,中间数就是127(2^7-1); 对于64位浮点数,中间数就是1023(2^10-1)。

浮点数取的过程

指数E从内存中取出还可以再分成三种情况:

E不全为0或1: 

那么浮点数取出来的时候就应该是:指数E的计算值减去127(或1023),得到真实值,再将有效 数字M前加上第一位的1。如:

0 10001011 11011000000000000000000

E全为0:

由于E是真实值加上127(1023)得到的数,那么如果E全为0,则真实的数可能就是1*2^-127,是一个无限接近于0的数,所以其在取出来的时候,有效数字M就不再加1,而是加0,这样会更加接近真实值。如:

0 00000000 01110000000000000000000

E全为1:

表示一个无穷大的数(正负取决于符号位S),如:

0 11111111 01000000000000000000000

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值