c语言:数据在内存中的存储

本文详细解释了C语言中整型和浮点型数据在内存中的存储方式,包括整型的补码存储、小端字节序和大端字节序,以及浮点数的存储结构。通过实际例子展示了如何判断编译器的存储方式。
摘要由CSDN通过智能技术生成

        在写代码时,我们会碰到把一个数据类型输出的时候,得到的结果与我们输入不同的情况,这往往是我们在输出时用了别的类型的输出方式,或者在数据存入的时候因为计算机的问题无法完整保存。下面就讲讲c语言中整型与浮点型数据在内存中是如何存储的。

一、整型

        首先,整型在内存中是以整数的补码存储的(原码,反码,补码这里就不多说了),然后存入数据总得有一个顺序,其实这个存储顺序可以我们想怎么存就怎么存,只要我们怎么存进去就怎么拿出来就行了。但是呢,总不能每个编译器都有它自己的一套复杂的存储方式吧,这就太麻烦了。所以编译器的整型一般都采用两种存储方式,一个是大端字节序存储,一个是小端字节序存储。接下来就讲讲什么是大小端字节序存储。

1.小端字节序存储

        这里我们就用十六进制表示一个整数来看看,为什么要用十六进制?因为在调试时,内存中的数据会以十六进制的形式展示出来,要是以二进制的样子显示就太长了,也看不懂。

        首先呢,n 这个十六进制整数用二进制表示出来是这样的:        

        因为一个字节有 8 个 bit 的空间,一个整型占 4 个字节, 也就是分成这样:

        所谓字节序呢,也就是一个字节一个字节的分开,再把字节按顺序存放。

我们在内存窗口中可以看到,在 vs 里面,把数字的低位的字节放在里地址较低的地方,也就是看起来和我们写的是反过来的,这就是小端字节序存储。

2.大端字节序存储

        既然已经讲了小端字节序存储,那么大端字节序存储就很简单了。就是在内存中和我们写的看起来一样,这就是大端字节序存储了。(就不举例子了)

3.写个程序判断编译器的整型存储方式

        我们只要写一个整型 1 ,然后把地址拿来用 char 类型把地址刚开始的那个字节的内容给拿出来,就可以轻松的判断出我们的编译器用的是大端存储还是小端存储了。

二、浮点型

        这里我们先看一段代码:

        同样的地址,用不同的方式取出来,显示的结果却相去甚远,这就是数据的存储方式不同照成的,不同的数据有不同的存储方法,取出的方法也不同,所以用错误的方法去取数据,结果就会有问题。

        那么浮点数的存储方式是怎样的呢?下面就来简单的说一下,就大概的讲一下它的存储方式。

        根据规定,每一个浮点数都可以表示为一下形式

以下是引用来的:

        然后,根据机器的不同,内存中会用一定位 bit 的空间来存储 S,M 和 E ,这样就可以达到存储浮点数的目的了。

        其中32位的机器,1 个 bit 用来存放 S, 8个 bit 用来存放 E ,剩余的 23 个 bit 来存放 M, 而64位机器的 S, E, M 则分别是 1,11,52个bit。

至于S,E,M 具体是怎么存储的,这里就不多赘述了,浮点数的存储就大体的介绍到这里。

        到这里我们的数据类型在内存中的存储的讲解也就结束了。最后希望别忘了点赞收藏加关注!!!(●'◡'●)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值