文章重点: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在内存中分别存储的是补码。但是我们发现顺序有点不太对劲。
由此引出大小端介绍:
什么是大小端:
为什么会有大端和小端: