@[TOC]
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对内存单元的寻址是以字节为单位的 ,
-
实例 --判断当前编译器是大端字节序还是小端字节序
//判断是大端字节序还是小端字节序 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 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,表示+/- 无穷大(在限制领域中)