1.数据类型详细介绍

2.数据的存储

2.1数据类型

  1. 整形

char、short、int、long、long long

  1. 浮点型

float、double

  1. 构造类型——自定义类型

数组、struct 结构体、enum 枚举、union 联合体

  1. 指针类型

char*、int*......

  1. 空类型 void

函数返回类型 void test(); 函数参数 void 指针 void* p;

2.2 原码反码与补码

为什么计算机中存储的是补码?

因为计算机由逻辑电路组成,而逻辑电路通常只有两种状态,即开关的接通与断开,刚好可以表示成‘1’和‘0’。另外,计算机为了设计简单,只设计了加数寄存器,通过补码的形式可以将减法转换为加法,计算机的CPU只能进行加法操作

2.3 大端存储和小端存储

大端存储:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。

小端存储:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。

注:CPU对内存单元的寻址是以字节为单位的

  1. 实例 --判断当前编译器是大端字节序还是小端字节序
  • 方法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;
}

  1. 实例 -- 理解原码、反码与补码
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]

image.png

2.4 浮点数的存储

根据IEEE754标准进行存储,任意一个浮点数V可以表示为下面的形式

(-1) ^ s M E ^ 2 ^ n S表示符号位 M表示有效数字,且 1 < M < 2 2 ^ E 表示指数位

  • 32位存储

image.png

  • 64位存储

image.png

  1. 实例

浮点数: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,表示+/- 无穷大(在限制领域中)