0
点赞
收藏
分享

微信扫一扫

数据在内存中的存储

文章重点:1.数据类型详细介绍 2.整形在内存中的存储 3.大小端字节序介绍及判断(将会在下一节文章中介绍浮点型在内存中的存储)

1.数据类型的详细介绍:

c语言中基本的内置类型有:

char:字符数据类型 short:短整型 int:整形 long:长整型 long long:更长的整形 float:单精度浮点数 double:双精度浮点数

如果想要知道它们所占存储空间的大小,可以在编译器上运行如下代码:

 

其中sizeof是一个操作符,是用来计算操作数的类型长度,并且是以字节为单位的。

在C语言标准中规定了这么多的数据类型,那它们的意义是什么呢?

1.使用这个类型所开辟内存空间的大小。(大小决定了使用的范围)

2.类型决定了我们去看待内存空间的视角。

1.1类型的基本归类:

数据类型有两大家族,一是整形家族,另一个则是浮点数家族。

首先,整形家族中有char、short、int、long。浮点型家族中有float和double两类。

在整形家族中,当我们在划分的细致一点时,每一种类型都对应的有有符号类型和无符号类型。

在C99标准规定中,为详细声明的int、short和long均指的是有符号的类型,即signed  int、signed  short和signed  long。但是标准并未定义未详细声明的char是否为signed  char类型的。但是在大多数编译器中,都可以看出编译器char类型的默认为signed char,即有符号的char类型(如何看出来将会在后面用代码来展现)。

2.整形在内存中的存储:

我们知道一个变量的创建是要在内存中开辟空间的。空间的大小又是根据不同的类型而决定的。

那接下来我们谈谈数据在所开辟的内存中是如何存储的呢?

比如:

int a = 20;
int b = -10;

 我们知道为a分配四个字节的空间。那到底是如何存储的呢?先来了解一个如下概念:

2.1 原码、反码、补码

计算机中整数有三种表示方法,即原码、反码和补码。

三种表示方法均有符号位数值位两部分,符号位都是用0表示“正”,用1表示“负”,数值位就是整数转化为二进制后所对应的数字。

负整数的三种表示方法各不相同。

正整数的原、反、补码都相同。

对于整形来说,数据存放在内存中的实际上是其相对应的补码。

为什么不存储相对应的原码或者反码来存储呢?

举个例子:先假设计算机中存储的是原码:

再来以计算机中存储的是数据的补码来进行测试:

3.大小端字节序及判断

#include<stdio.h>
int main()
{
    int a=20;
    int b=-10;
    return 0;
}

由此我们可以更加确定,a和b在内存中分别存储的是补码。但是我们发现顺序有点不太对劲。

由此引出大小端介绍:

什么是大小端:

为什么会有大端和小端:

举报

相关推荐

0 条评论