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

整型(int为例):

假如一个整型数据a=1,

一个整型是四个字节(32位比特位)

然后可以写成符号位+数值位,如图

0a40746dd26d48348a04124774fff058.jpg因为这里是正的1,(正数原码,反码,补码相同),(负数原码,反码=原码符号位不变,数值位(其他位)按位取反,补码=反码+1)

3a8947b7790841eaa15a036d9d6a45c6.jpg

 这里浅浅的介绍一下大小端存储

5dfc6e86045d444eb88848ea084c3271.jpg

 小端存储下的1

7cd20b628fca4fe98ed877b7089d5585.jpg

 大端存储下的1416bd66cb41647c5bdac93b0d5a76c39.jpg

 浮点型数据的存储

74842b1802624169b6a2c6b943d62e0d.jpg浮点数转为二进制的算法    (整数部分)         

5b151780fc9040acae33e5788ca4c40d.jpg 浮点数转为二进制的算法(小数部分)

根据乘2取整法,将小数部分乘以2,然后取整数部分,剩下的小数部分继续乘以2,然后取整数部分,剩下的小数部分又乘以2,一直取到小数部分为零为止。
 则0.5转换为二进制的步骤为:
 1. 0.5×2=1,取整数部分1;
2. 小数部分为0,转换结束。
 因此,0.5转换为二进制是0.1。

 da9f950ec6224363a7bff0efccd09f80.jpg

 v=5.5的浮点数的最终表示结果

27478f6e4628432ba8a084b31d53a256.jpg

 在IEEE 754标准中,浮点数的存储方式如下:
 
- 对于32位的浮点数,最高的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M。
- 对于64位的浮点数,最高的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M。
 
在存储浮点数时,S位(符号位)通常存储在最高位,也就是地址的高地址处。而指数E和有效数字M则存储在S位之后的位置,具体的存储顺序可能会因计算机体系结构和编译器的实现而有所不同。
 

c2587dc15e5d4e9b8c93205f8efe3200.jpg

 4521071837e549d99bb4b0d1eab89452.jpg

 IEEE 754 在存储浮点数时,对尾数 M 和指数 E 有一些特殊规定,具体如下:

 

- 尾数 M:IEEE 754 规定,在计算机内部保存 M 时,默认这个数的第一位总是 1,因此可以被舍去,只保存后面的部分。比如保存 1.01 的时候,只保存 01,等到读取的时候,再把第一位的 1 加上去。这样做的目的是节省 1 位有效数字。以 32 位浮点数为例,留给 M 只有 23 位,将第一位的 1 舍去以后,等于可以保存 24 位有效数字。

- 指数 E:IEEE 754 规定,指数 E 是一个无符号整数,对于 8 位的 E,它的取值范围为 0 到 255;对于 11 位的 E,取值范围为 0 到 2047。由于科学计数法中的 E 是可以出现负数的,所以 IEEE 754 规定,存入内存时 E 的真实值必须再加上一个中间数,对于 8 位的 E,这个中间数是 127;对于 11 位的 E,这个中间数是 1023。

然后怎么取出浮点数呢?接下来也说一下

根据 IEEE 754 标准,M 是一个小数,它的取值范围是大于等于1,小于2,可以写成1.xxxxxx的形式,其中xxxxxx表示小数部分。
 
IEEE 754规定,在计算机内部保存M时,默认这个数的第一位总是1,因此可以被舍去,只保存后面的xxxxxx部分。比如保存1.01的时候,只保存01,等到读取的时候,再把第一位的1加上去。这样做的目的是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第一位的1舍去以后,等于可以保存24位有效数字。

根据 IEEE 754 标准,指数 E 从内存中取出时还可以再分成三种情况:
 
- E 不全为 0 或不全为 1:这时,浮点数就采用下面的规则表示,即指数 E 的计算值减去 127(或 1023),得到真实值,再将有效数字 M 前加上第一位的 1。
- E 全为 0:这时,浮点数的指数 E 等于 1-127(或者 1-1023)即为真实值,有效数字 M 不再加上第一位的 1,而是还原为0.xxxxxx的小数。这样做是为了表示+0,以及接近于0的很小的数字。
- E 全为 1:这时,如果有效数字 M 全为 0,表示+无穷大(正负取决于符号位 s)。

今天的分享到此结束啦,如果我讲的还行,就点个关注叭!

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值