【数据的存储】浮点数在内存中的存储详解【超详细的保姆级别教程,让面试官对你心服口服】手撕浮点数存储使用方式
先赞后看好习惯 打字不容易,这都是很用心做的,希望得到支持你 大家的点赞和支持对于我来说是一种非常重要的动力。看完之后别忘记关注我哦!️️️
- 注:本期博客内容可能不会使得我们写代码的能力提高,但是,这期博客是学习计算机深层次的知识,是内功的修炼,学会这些内容,我们才能在面试笔试场上游刃有余,脱颖而出!
文章目录
引入
我们来看这个代码,伙伴们可以思考一下,输出的结果是什么。
浮点数的存入
具体S、M、E代表什么,我们来举一些例子
了解完浮点数如何改写成二进制的规定形式之后,接下来,S,M,E这些数字如何放进内存里面呢?
对于有效数字M,和指数E,在存入的时候还有一些特殊的规定:
看到这里,可能很多伙伴都懵掉了,因此,我们来举几个例子即可:
我们可以用这个代码测试,打开内存,我们就可以看我们算的对不对了。
int main() {
float f = 5.5;
float f2 = 0.5;
return 0;
}
浮点数的取出
浮点数在取出的时候,还要分为三种情况讨论:
- 情况1:E不为全0或不为全1时:
此时,取出的方式和存进去的相反,怎么存怎么取。 将指数E减去127(或1023),得到真实值,然后再将有效数字M前加上第一位的1。 - 情况2:E为全0:
此时,浮点数的指数E等于1-127或(1-1023)得到真实值,有效数字M不再加上第一位的1,而是还原为0.xxxxxxx
的小数。这样其实时为了表示±0这个数,因为当E的比特位上全部都是0的时候,其实原来的数字是带着2的负126次方或2的负1023次方的,是一个很小的数字,所以计算机直接将其解析为0。 - 情况3:E为全1
同理,和全零类似,全1的数字带着2的126次方的指数(或1023次方),是个很大的数字,当计算机看到全1的时候,直接解析成无穷大。
引入的解释
其实看到这里,我们对浮点数在内存中的存储已经了解地非常深入了,这些知识储备足够我们应付笔试和面试官的提问。
接下来,我们看回这题:
现在,用我我们所学的方法,解释那个答案是怎么出来的。
所以,搞懂浮点数在内存中存储之后,我们就可以很好地解释那个结果了。
尾声
虽然本期博客内容可能不会使得我们写代码的能力提高,但是,这期博客是学习计算机深层次的知识,是内功的修炼,学会这些内容,我们才能在面试笔试场上游刃有余,脱颖而出!
因此,在临走之前,不要忘了你的点赞关注和收藏哦!