数据的存储

Source

一.数据类型的基本归类

整型家族:

char (字符是以ASCII码来存储,ASCII码值是整数,则char也是整型)
unsigned char
signed char
short
unsigned short [ int ] (int可省略)
signed short [ int ]
int
unsigned int
signed int
long
unsigned long [ int ]
signed long [ int ]
不加前缀的     int     long[int]     short[int]  默认是signed类型,只有  char  是unsigned还是signed取决于编译器的实现。常见的编译器下是:char 就是 signed char 

浮点数家族:

float
double

构造类型(自定义类型):

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

指针类型:

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

空类型:

void 表示空类型(无类型)
通常应用于函数的返回类型、函数的参数、指针类型。

二.整型在内存中的存储

原码、反码、补码

原码:直接将二进制按照正负数的形式翻译成二进制就可以。

反码:将原码的符号位不变,其他位依次按位取反就可以得到了。

补码: 反码+1就得到补码。 

对于整型来说:数据存放在内存中的是补码

#include <stdio.h>
int main()
{
	//负数补码按位取反,再加1,就变回原码
	int i = -15;
	//10000000 00000000 00000000 00001111原码
	//11111111 11111111 11111111 11110000反码
	//11111111 11111111 11111111 11110001补码
	
	int a = 15;
	//00000000 00000000 00000000 00001111原码
	//00000000 00000000 00000000 00001111反码
	//00000000 00000000 00000000 00001111补码
	return 0;
}

****正数的原码,反码,补码都相同

将负数的补码转化为原码,可以将其补码按位取反,再加1,就可以变为原码。

大小端存储

 

大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址

中;(高位低存)
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地
址中。(高位高存)

 用一道题来加深理解:

请简述大端字节序和小端字节序的概念,设计一个小程序来判断当前机器的字节序。

#include <stdio.h>
int check()
{
	int j = 1;
	//0x 00 00 00 01  如果1存在低位,则为小端
	//char* p = (char*)&j;
	//if (1 == *p)
	//{
	//	return 1;
	//}
	//else
	//	return 0;
	//下面是简版
	// p = (char*)&j ->  *p = *(char*)&j
	return *(char*)&j;//char*指针访问权限为第一位地址,第一位地址为低位,查看低位在内存中为合数来判断大小端存储

}
int main()
{
	int i = check();//i返回1,输出小端  返回其他是大端
	if (1 == i)
	{
		printf("小端\n");
	}
	else
		printf("大端\n");
	return 0;
}