数据在内存中的存储

在之前的博客中,我将到过整数在内存中的存储,但是,其实,对于C语言来说,还有许多数据在内存中的存储我还没有提到。那么,今天我想要讲的主要就是浮点数在内存中的存储。但是在将这些传递给大家之前,我还想对此作一些铺垫。

1.整数在内存中的存储

首先,为了让第一次看我博客的朋友可以快速地了解我之前的博客写的东西。我们先来复习一下整数在内存中的存储方式。在之前的博客中,我讲到过整数都是以二进制的方式存储到内存中的。都是以32个比特位的形式存储的。那么对于这32个比特位来说,就存在了原码,反码和补码的概念。

正号整数的原反补码都是一样的

负号的整数的原反补码就有区别了

原码:直接即将原数字按照正负数的形式翻译成的二进制得到的就是原码

反码:除了符号位不变之外,其余的都按位取反

补码:反码+1就是补码

那么,讲了那么多,为什么整数在内存中的存储会是二进制的形式呢?那是因为是用补码,可以将符号位和数值域统一处理。此外,补码和原码的相互转换,其过程是相同的,不需要额外的硬件电路。

2.大小字节序和字节序判断

在讲这个知识点之前,肯定会有很多朋友不知道上面的大小字节是什么,没关系,大家请看下面的代码,我会给大家好好介绍大小字节的。

上面的代码展示的就是a的内容在内存中的存储顺序,在原代码中我写的顺序是11223344,但是在内存中存储的顺序却是44332211。这就是我要介绍的大小端了。接下来,我就来给大家好好介绍介绍大小端字节。

1.大端存储

是指数据的低位字节内容保存在了地址的高地址处,而数据的高位字节内容被存储到了地址的低地址处。说白了,就是按照正序排列的。

2.小端存储

是指数据低位字节内容保存在了内存低地址处,而数据的高位字节内容被存储到了内存高地址处。

也说白了就是倒序存储的。

讲完了大小端的概念,接下来,我来给大家写一个代码,来来判断一下,我现在使用的编译器对于内存的存储是大端存储还是小端存储,大家请看下面的代码。

上面的代码展示的就是使用代码判断编译器的大小端存储。感兴趣的朋友也可以自己在编译器上尝试一下,这可能会对你更有帮助。

3.浮点数在内存中的存储

讲完上面的所有内容之后,我的铺垫就全部做完了,接下来,就进入我们的正题。浮点数在内存中的存储。再讲这个之前,我想让大家先看一段下面的代码。

大家可以猜一猜,这段代码它的运行结果是什么。好了,不和大家卖关子了,接下来,我就来公布答案。

运行结果和你们想的一样吗?可能有些朋友可能会很吃惊,我为什么会运行出这样的结果。在这里,我就要告诉大家的就是,有这段代码看来,其实整数和浮点数在内存中的存储方式是不同的。说明了浮点型的数据在内存中并不会像整数一样是按照补码的形式存储的。接下来,我就来给大家讲一讲浮点数在内存中的存储方式。

下面的图片展示的就是上面的图片对于基本组成与存储结构的解释。

接下来,我就来给大家讲一下,浮点型的存储和取出方式。

看完上面的资料,我想大家可能还是有点懵,接下来,我给到大家看看一些例子就好了。

这就是我今天的博客想要分享的内容了,今天的博客的内容有点难,但是对与写代码来说大家可能会了解的更深入,今天的内容大家可以只当做一个科普的内容去看待,大家了解了解即可。好了,今天的博客就分享到这里,希望对你的C语言学习有帮助。我们下一篇博客再见!!!

相关推荐
isyangli_blog7 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb2008118 小时前
FastAPI APIRouter
开发语言·python
Benszen8 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆8 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木8 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
杨充8 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法
噜噜噜阿鲁~8 小时前
python学习笔记 | 11.3、面向对象高级编程-多重继承
java·开发语言
basketball6168 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
春生野草9 小时前
反射、Tomcat执行
java·开发语言
雪的季节10 小时前
企业级 Qt 全功能项目
开发语言·数据库·qt