c 语言数据的存储

200 阅读2分钟

数据的存储

char   // 字符数据类型
short  // 短整型
int   // 整型
long   // 长整型
long long  // 更长的整型
float    // 单精度浮点数
double   // 双精度浮点数
// c 语言没有字符串类型?

类型的意义:

  1. 使用这个类型开辟内存空间的大小(大小决定了使用范围)
  2. 如何看待内存空间的视角

类型的基本归类

unsigned 无符号

signed 有符号

整型家族:

dd996.png

浮点型家族:

float double

构造类型-自定义类型:

  • 数组类型
  • 结构体类型 struct
  • 枚举类型 enum
  • 联合体类型 union

指针类型:

int *pi;
char *pc;
float *pf;
void *pv;

空类型:

void表示无类型。

一般用在,函数返回类型,函数参数,指针

整型在内存中是怎样存储的

int main()
{
	int a = -10;
	/*
		原码:
		 10000000 00000000 00000000 00001010
		反码:
		 11111111 11111111 11111111 11110101
		补码:
		 11111111 11111111 11111111 11110110
	*/
	return 0;
}

/*
	数据在内存以二进制的形式存储
	对于整数来说:
		整数二进制有三种:原码 反码 补码

	正整数:原码 反码 补码 相同。
	负整数:原码 反码 补码 需要计算

	按照数据的数值直接写出的二进制序列是原码
	原码的符号位不变,其它位按位取反,就是反码
	反码 加 1 得到的就是补码

	整数在内存中存储的是补码
*/

大端字节序:

把数据的低位字节序的内容存放在高地址处,高位字节序的内容存放在低地址处

小端字节序:

把数据的低位字节序的内容存放在低地址处,高位字节序的内容存放在高地址处

int main()
{
	// 大端字节序 小端字节序
	int a = 1;
	char* pa = (char*)&a;
	if (*pa == 1)
	{
		printf("小端");
	}
	else 
	{
		printf("大端");
	}
	return 0;
}

int main()
{
	char a = -1;
	signed char b = -1;
	unsigned char c = -1;
	printf("%d %d %d", a,b,c);// -1 -1 255
	return 0;
	/*
		补充:
			1.char 到底是 signed char还是unsigned char?
			c语言标准并没有规定,取决于编译器

			int 是 signed 标准规定
			short 是 signed 标准规定
	*/
}

  • 有符号的 char 取值范围 -128 - 127

浮点数在内存中的存储

常见的浮点数:

3.14159 1E10浮点数包括:float double long double类型。浮点数表示范围:float.h中定义。

1122.png

浮点数和整数在内存中的存储方式一定有区别的。