1. 数据类型详细介绍
C语言内置类型包括 char, short, int, long, long long, float, double。类型的意义在于决定了开辟内存空间的大小以及看待内存空间的视角。
1.1 类型的基本归类
- 整型家族 :包含
char(注意:char 在标准中未规定是 signed 还是 unsigned,取决于编译器),short,int,long等。均分为signed(有符号) 和unsigned(无符号)。 - 浮点数家族 :
float,double。 - 构造类型 :数组, 结构体 (
struct), 枚举 (enum), 联合 (union)。 - 指针类型 :
int *pi,char *pc,void *pv等。 - 空类型 :
void,用于函数返回、参数或指针。
2. 整型在内存中的存储
计算机中的整数有三种二进制表示方法:原码、反码、补码 。 在计算机系统中,数值一律用补码来表示和存储。
2.1 原码、反码、补码转换规则
- 正数:原码、反码、补码相同。
- 负数 :
- 原码:符号位为1,其余位为数值的绝对值。
- 反码:符号位不变,其他位按位取反。
- 补码:反码 + 1。
2.2 为什么要用补码?
- 可以将符号位和数值域统一处理。
- 加法和减法可以统一处理(CPU 只有加法器)。
- 补码与原码相互转换的过程是相同的(求补的补即为原),不需要额外硬件。
3. 大小端字节序
当数据大小超过1个字节时,就存在如何安排多个字节顺序的问题。
- 大端模式 (Big Endian):数据的低位保存在内存的高地址中,高位保存在低地址中。(类似我们阅读习惯,高位在前)。
- 小端模式 (Little Endian):数据的低位保存在内存的低地址中,高位保存在高地址中。(常见于 x86 架构)。
4. 浮点型在内存中的存储
遵循 IEEE 754 标准。任意二进制浮点数 V 可以表示为:

- S (Sign):符号位,0正1负。
- M (Significand):有效数字,1 ≤ M < 2。
- E (Exponent):指数位。
- 32位 (float):S(1位) + E(8位) + M(23位)。
- 64位 (double):S(1位) + E(11位) + M(52位)。
特殊规定
- M 的存储 :因为 M 总是
1.xxxx,为了节省一位,默认第一位的 1 被舍去,只存xxxx。读取时自动补回。 - E 的存储 :E 是无符号整数,但真实指数可能是负数。存入时需加上中间数 (Bias) 。
- float 的 Bias 为 127。
- double 的 Bias 为 1023。