1.数据类型详细介绍
2.数据的存储
2.1数据类型
- 整形
char、short、int、long、long long
- 浮点型
float、double
- 构造类型——自定义类型
数组、struct 结构体、enum 枚举、union 联合体
- 指针类型
char*、int*......
- 空类型 void
函数返回类型 void test(); 函数参数 void 指针 void* p;
2.2 原码反码与补码
为什么计算机中存储的是补码?
因为计算机由逻辑电路组成,而逻辑电路通常只有两种状态,即开关的接通与断开,刚好可以表示成‘1’和‘0’。另外,计算机为了设计简单,只设计了加数寄存器,通过补码的形式可以将减法转换为加法,计算机的CPU只能进行加法操作
2.3 大端存储和小端存储
大端存储:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。
小端存储:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。
注:CPU对内存单元的寻址是以字节为单位的 ,
- 实例 --判断当前编译器是大端字节序还是小端字节序
- 方法1:
int main()
{
int a = 1;
//对于变量a=1:0x00000001(假设从左向右为低地址高地址)
//小端存储: 01 00 00 00
//大端存储:00 00 00 01 --->判断首个字节处是否为1即可
char* pa = (char*) &a;
if (*pa == 1)
{
printf("小端字节序\n");
}
else
{
printf("大端字节序");
}
return 0;
}
- 方法二(联合体):
int Check_sys() :
{
union U
{
char c;
int i;
}u;
u.i = 1;
return u.c;
}
int main()
{
int ret = Check_sys();
if (ret == 1)
{
printf("小端字节序\n");
}
else
{
printf("大端字节序");
}
return 0;
}
- 实例 -- 理解原码、反码与补码
int main()
{
char a = -1;
//原码100000000000000000000000000000001
//反码 111111111111111111111111111111110
//补码 111111111111111111111111111111111
//整型提升--发生截断
//11111111 --> -1
signed char b = -1; //同a
unsigned char c = -1;
//整型提升:11111111 -->无符号整型,首尾不代表符号位 -->255
printf("%d %d %d", a, b, c);
return 0;
}
2.3 char在内存中的存储
char类型存放的数值, signed char最多是127, unsigned char 的取值范围是 [0,255],signed char 的取值范围是 [-128, 127]
2.4 浮点数的存储
根据IEEE754标准进行存储,任意一个浮点数V可以表示为下面的形式
(-1) ^ s M E ^ 2 ^ n S表示符号位 M表示有效数字,且 1 < M < 2 2 ^ E 表示指数位
- 32位存储
- 64位存储
- 实例
浮点数:5.5 -- DEX(十进制) BIN(二进制)-- 101.1 --> 1.011 * 2 ^ 2 --> (-1) ^ 0 * 1.011 * 2 ^ 2 S : 0; M: 1.011; E: 2
当E为无符号数 为了修正E: foat存储值为 : 原数值 + 127 double存储值为 :原数值 + 1023
特殊:如果E为全0 ,表示+/- 0;如果E全为1,表示+/- 无穷大(在限制领域中)