我们都知道C语言基本的内置类型:char //字符数据类型
short //短整型
int //整形
long //长整型
long long //更长的整形
float //单精度浮点数
double //双精度浮点数
需要注意的是,C语言没有字符串类型!
那么,不同的类型决定了他们所占存储空间的大小的不同,这也是类型的意义之一。
类型的基本归类
整形家族char
unsigned char
signed char
short
unsigned short [int]
signed short [int]
int
unsigned int
signed int
long
unsigned long [int]
signed long [int]
浮点数家族float
double
构造类型> 数组类型
> 结构体类型 struct
> 枚举类型 enum
> 联合类型 union
指针类型int *pi;
char *pc;
float* pf;
void* pv;
空类型
void 表示空类型(无类型)
通常应用于函数的返回类型、函数的参数、指针类型。
上面我们详细介绍了C语言的各种数据类型,而我们知道一个变量的创建是要在内存中开辟空间的。空间的大小是根据不同的类型而决定的。
那么,数据在所开辟内存中到底是如何存储的?
下面我们首先来看整形在内存中到底是如何存储的
整形在内存中的存储
比如:int a = 20;
int b = -10;
我们知道要为 a 分配四个字节的空间。 那如何存储呢?
要搞清楚整形在内存中的存储,就必须先了解下面一组概念:
原码、反码、补码
计算机中的有符号数有三种表示方法,即原码、反码和补码。
三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位三种表示方法各不相同。
原码
直接将数据按照正负数的形式翻译成对应的二进制序列。
反码
原码的符号位不变,其他位依次按位取反。
补码
反码 1就得到补码。
正数(无符号数)的原、反、补码都相同。
相信学过计算机组成原理这门课的读者对于这一概念并不陌生。
对于整形来说:数据存放在内存中其实存放的是补码。
为什么呢?
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一