浮点数在内存中的存储

  根据国际标准IEEE(电⽓和电⼦⼯程协会)754,任意⼀个⼆进制浮点数V可以表⽰成下⾯的形式:
V   =  (−1) ^S* M ∗ 2^E 
• (−1)S 表⽰符号位,当S=0,V为正数;当S=1,V为负数
• M表⽰有效数字,M是⼤于等于1,⼩于2的
• 2E 表⽰指数位 

列如:5.0(5的二进制为101)=1.01*2^2=(-1)^0*1.01*2^2

对于任意一个浮点数我们都可以将其写类似于科学计数法的方式,只是这里使用的是二进制,同时用-1的0次或者1次来表示,即都可以写成IEEE754所规定的标准,其实计算机在进行储存的时候,就是储存的S,M,E这三个数

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

计算机对于M的存储

由于每一个M都有一个1,所以计算机就可以直接储存M的小数部分,这样就避免了浪费一个bit位,多一位来存储小数,可以提升精度。

十进制小数转化为二进制

对于小数点后面的部分,一般的放法是乘2法,即对于十进制的小数先乘以2,要是有进位1,就拿出来,要是没有,就拿出来0,然后继续拿出乘以后的小数点乘以2,这样一直循环,直到乘出来数字没有小数了,按照先后顺序排列这些拿出来的0或者1,即为对应的二进制数列

但对于一些相对于简单的,我们就可以根据二进制中小数部分的权重来直接写出,0.11111对应的权重从左到右分别就是2的负一次(0.5),2的负二次(0.25),2的负三次(0.125).....,我们通过这些组合就不难看出一些简单的小数,列如0.75就是0.5+0.25即二进制0.11

同时,对于一些小数,3.14无法精确的算出其二进制的小数位,此时计算机就会储存一个非常接近的数字来表示它

计算机对于E的储存

我们知道,在科学计数法中,E既可以是正数,也可以是负数,那么我们该怎么储存呢......

IEEE754于是就规定,我们在存储的时候,必须要给E加上一个中间值,让E成为一个正数,对于8位的E,中间值位127,对于11位的E,这个中间值位1023。列如:2^10,E=10,对于8位E来说,储存的数字就等于10+127=137。

对于一些特殊的E

1.E全为1,2的这么多次将是一个极其大的数字,计算机将认为存储的是一个无穷大的数字

2.E全为0,2的负这么多次将是一个非常小的数字,计算机对于此类数字E=1-127(1-1023)表示真实值,同时M不再加上1,计算机用来表示一个非常接近于0的数字,或则是正负0.

列如​​​​​​​

                                                                                                                                                                                                                                                                                                                                                                                           

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值