数据的存储
char // 字符数据类型
short // 短整型
int // 整型
long // 长整型
long long // 更长的整型
float // 单精度浮点数
double // 双精度浮点数
// c 语言没有字符串类型?
类型的意义:
- 使用这个类型开辟内存空间的大小(大小决定了使用范围)
- 如何看待内存空间的视角
类型的基本归类
unsigned 无符号
signed 有符号
整型家族:
浮点型家族:
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中定义。
浮点数和整数在内存中的存储方式一定有区别的。