深度剖析数据在内存中的存储 [整形,大小端字节序.....]


一、整形数据在内存中的存储

1.一些基本整形数据类型

在这里插入图片描述
<此处仅仅列出一些整形数据类型,除此之外还有浮点型数据类型,构造类型,指针类型,空类型。>

基本整形数据类型也分为有符号与无符号,例如我们最常见的int便分为如下两种:
在这里插入图片描述
简单来说,有正负的数据可以放在有符号变量中,只有正数的数据可以放在无符号变量中。
此处以int举例:

在这里插入图片描述
我们通过打印数据发现,同样是赋值-1,两者答应的数据截然不同。
前者打印出了非常巨大的正数(后续会讲到为什么是这个数字,此处禁仅仅用来论证无符号数据不可以存放负数),后者则可以正常打印出-1。

那么在内存中,有无符号数据具体是如何体现的呢?
此处以char为例:

在这里插入图片描述
在这里插入图片描述
不难看出八位全0,到八位全1也就是0~255.

那当我们来看带符号的char呢?此处我们放到后面原码,反码,补码来讲解。

2.原码,反码,补码

我们知道数据在内存中以二进制的方式来存储。此时我们给出如下的定义:
在这里插入图片描述
在这里插入图片描述
此时我们来算一下带符号的char所能表示的范围:
在这里插入图片描述
在这里插入图片描述

所以不难得出,带符号的char的范围是 -128~127。

大家在自己的编译器同样可以算出,有无符号的int,short所能表示的范围,有问题可以评论区留言。

3.大小端字节序

在这里插入图片描述

这里我们给出关于大小端字节序的概念:

在这里插入图片描述
为什么会存在大小端字节序呢?

那是因为我们的计算机是以1个字节为单位的(每个字节都有自己的地址,如果是32位的话,在找完第一个字节后,会去找第二个字节的地址,但32个位给用户返回的是第一个字节的地址为首地址,自己内部来做访问其它地址的操作,32位是同时处理4个字节,相当于是一个原子操作,这四个字节是在寄存器内部连续访问完成后才使用的,所以说是同时处理32位,其实就是不会使用其它寄存器来处理四个字节,而是一个寄存器处理四个字节),刚开始使用的是8位处理器时,是没有字节序之分的,但是到了32位时,它就不只一个字节大小,而是4个字节大小,处理器能够同时处理4个字节,性能肯定是比8位的好,但出现了一个问题就是我们的单位是1个字节,但我现在能够同时处理4个字节,所以这个字节在寄存器中排列的顺序就是一个问题(1个寄存器中能够存32位了),所以就有了大小端之分,大端就是比较符合我们一般的认知,高地址在高位,我们平常也是这样看的,但是小端的存储方式计算机处理起来比较方便,但是也快不了多少,所以各自有各自的好处,一直没有抛弃哪个,所以就有了两个端,所以不同的电脑使用的端也不一样,所以在传输数据时要考虑端与端之间的差别。

此刻我们再来回顾刚开始给出的例子,为什么会打印出这个十分巨大的数字,这个数字是什么。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AF帆_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值