1. 数据在内存中的存储基础
在计算机系统中,数据存储是一个看似简单实则充满设计智慧的领域。作为C/C++开发者,理解数据在内存中的存储方式不仅有助于编写高效可靠的代码,更能帮助我们深入理解计算机底层工作原理。
1.1 整数的二进制表示方法
整数的二进制表示有三种形式:原码、反码和补码。这三种表示法都包含符号位和数值位两部分:
- 符号位:最高位(最左边的位)表示符号,0表示正数,1表示负数
- 数值位:符号位之后的部分表示实际数值
正整数的表示:
对于正整数,原码、反码和补码完全相同。例如十进制数5的8位二进制表示:
code复制原码:00000101
反码:00000101
补码:00000101
负整数的表示:
负整数的三种表示方法各不相同,以十进制-5为例:
-
原码:直接转换数值,符号位置1
code复制原码:10000101 -
反码:符号位不变,其他位取反
code复制反码:11111010 -
补码:反码加1
code复制补码:11111011
注意:补码系统中,0有唯一的表示(全0),而原码和反码中0有+0和-0两种表示,这是补码被广泛采用的重要原因之一。
1.2 为什么使用补码存储
现代计算机系统普遍采用补码存储整数,主要原因包括:
-
统一加减法运算:补码表示下,加法和减法可以使用相同的硬件电路处理。CPU只需要加法器就能完成加减运算,简化了硬件设计。
-
消除+0和-0的歧义:补码系统中0只有一种表示形式(全0),避免了原码和反码中+0和-0的问题。
-
符号位参与运算:补码的符号位可以直接参与运算,不需要特殊处理。
-
表示范围对称:对于n位补码,可表示的范围是[-2^(n-1), 2^(n-1)-1],比原码多表示一个负数。
补码运算示例:
计算5 + (-3):
code复制5的补码:00000101
-3的补码:11111101
相加结果:00000010(即2,正确)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 大小端字节序详解
2.1 大小端的概念
当数据超过一个字节时,就存在字节存储顺序的问题,这就是大小端字节序的区别:
- **大端模式(Bi
