前言:本篇文章我们将讲解一下C语言中的数据类型以及它们在内存中是如何存储的。
一.数据类型介绍
C语言的基本数据类型包括一下几个:
char 字符数据类型 1个字节
short 短整型 2个字节
int 整型 4个字节
long 长整型 4/8个字节(32位/64位)
longlong 更长整型 8个字节
float 单精度浮点型 4个字节
double 双精度浮点型 8个字节
那么为什么要划分这么多的数据类型呢?
这是因为它们所占的空间内存大小各不相同,同时用他们来定义不同类型的变量。
我们在写代码时,要遵循用最少的内存空间来干出更大的事情,这就要求我们在编程中灵活运用不同的数据类型。
对于上边的七个数据类型,我们将前五个与后两个分为两大家族:
1.整型家族
整型顾名思义就是定义的变量为整数,但这里为什么char会是整型家族的一员呢,它不是定义的字符型吗?
其实,字符在内存中存储的是字符的ASCII码值,ASCII码值为整型,所以将字符类型归类到整型中去。
2.浮点型家族
浮点数也就是我们平时所说的小数,例如:3.14159,之所以称为浮点数,是因为它的小数点可以左右浮动,像写成0.314159 * 10,或者31.4159 / 10。因为浮点数没有什么重要的知识,所以我们这里暂时不做过多解释。
3.构造类型
除了整型和浮点型以为,还有一种我们自己定义的数据类型,称为构造类型,包括一下几个:
数组类型 arr[]
结构体类型 struct
枚举类型 enum
联合类型 union
4.指针类型
int *pi 整型指针
char *pc 字符型指针
float *pf 浮点型指针
void *pv 空指针
5.空类型
void表示空类型(无类型)
通常用于函数的返回类型,函数的参数,指针类型。
下面我们将只进行整型的讲解,后四种类型并非我们本文章讲解的重点,所以这里仅用于展示,不做展开讲解,小伙伴们了解即可。
二.整型在内存中的存储
计算机能够处理的是二进制数据,整型和浮点型数据在内存中也都是以二进制的形式进行存储的。
整数在内存中存储的是补码的二进制序列。
1.原码,反码,补码
整型的二进制形式有三种,分别为原码,反码,补码。
三种表示方法均有符号位,和数值位两部分,符号位都是用“0”表示正,“1”表示负。
正整数的原码,反码,补码相同。
负整数的反码是原码的符号位不变,其余各个位数按位取反,补码则为反码+1。
详细讲解如下图:
我们在分别来看两个数所占的内存:
这里我们使用的VS编译器是将二进制转化成十六进制再在内存中展示出来的,但是我们发现它们和上边的二进制顺序却是相反的,这是为什么呢?
2.大小端介绍
什么是大小端?
大小端分别是大端字节序存储和小端字节序存储。
大端字节序存储:把一个数据的低位字节处的数据存放在内存的高地址处,高位字节处的数据存放在内存的低地址处。
小端字节序存储:把一个数据的高位字节处的数据存放在内存的高地址处,低位字节处的数据存放在内存的低地址处。
详情如下图:
由此可以看出,我使用的这个VS编译器是小端字节序存储。
三.总结
整型可以说是最为简单的一个数据类型了,这里也只是单纯的讲解了一下我所已经了解和掌握的知识,如有不足之处,欢迎各位小伙伴们在评论区补充,喜欢博主文章的不要忘记一键三连哦,我们下期再见!