1. 内存中的数据存储基础
计算机内存就像是一个巨大的仓库,里面整齐排列着无数个小格子,每个格子可以存放一个二进制位(0或1)。这些格子被组织成更大的单元,我们称之为"字节"(Byte)。在大多数现代计算机系统中,1个字节由8个二进制位组成,这是数据存储的基本单位。
当我们谈论数据在内存中的存储时,实际上是在讨论不同类型的数据(整数、浮点数、字符等)如何被转换为二进制形式,并按照特定规则存放在这些内存格子中。这个过程看似简单,但背后却蕴含着计算机科学中许多精妙的设计。
注意:不同架构的计算机可能采用不同的字节序(大端序或小端序),这会影响多字节数据在内存中的具体排列方式。我们将在第3章详细讨论这个问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 整数的存储方式
2.1 原码、反码和补码
整数在内存中的存储通常使用补码(Two's complement)表示法。要理解补码,我们需要先了解原码和反码:
- 原码:最高位表示符号(0为正,1为负),其余位表示数值的绝对值
- 反码:正数的反码与原码相同;负数的反码是在原码基础上符号位不变,其余位取反
- 补码:正数的补码与原码相同;负数的补码是其反码加1
补码表示法之所以成为主流,是因为它解决了原码和反码中存在的一些问题:
- 统一了0的表示(只有+0,没有-0)
- 简化了加减法运算(减法可以转换为加法)
- 可以多表示一个负数(对于n位二进制,可表示-2^(n-1)到2^(n-1)-1)
2.2 整数存储示例
让我们以8位有符号整数为例:
-
数字5的存储:
- 原码:00000101
- 反码:00000101
- 补码:00000101
-
数字-5的存储:
- 原码:10000101
- 反码:11111010
- 补码:11111011
在实际计算机系统中,整数通常以补码形式直接存储在内存中。当我们查看内存内容时,看到的就是补码表示。
3. 浮点数的存储方式
3.1 IEEE 754标准
浮点数在内存中的存储遵循IEEE 754标准,这个标准定义了浮点数的二进制表示方法。最常见的两种格式是:
- 单精度浮点数(32位)
- 双精度浮点数(64位)
以单精度浮点数为例,它的32位被划分为三个部分:
- 符号
