从printf到二进制:C语言数据存储的底层原理详解
1. 整数在内存中的二进制表示
当我们谈论整数在计算机中的存储时,实际上是在讨论二进制补码表示法。现代计算机系统中,整数通常以补码形式存储,这种设计巧妙地统一了正负数的加减法运算。
补码的核心特性:
- 正数的补码与原码相同
- 负数的补码是其绝对值的原码取反后加1
- 最高位为符号位(0表示正数,1表示负数)
例如,8位系统中数字5的表示:
00000101 // 原码 = 补码
而-5的表示则是:
11111011 // 补码表示
提示:补码的设计使得加减法可以使用相同的硬件电路,简化了CPU设计。
2. 大小端存储与平台差异
不同处理器架构对多字节数据的存储顺序有不同的约定,这就是著名的大小端(Endianness)问题。
大端模式(Big-Endian):
- 高位字节存储在低地址
- 类似于人类书写习惯
- 网络协议和部分RISC处理器采用
小端模式(Little-Endian):
- 低位字节存储在低地址
- x86/ARM等常见架构采用
以下代码可以检测当前系统的字节序:
#include <stdio.h>
int check_endian() {
int num = 1;
return *(char *)&num == 1; // 返回1表示小端
}
平台差异对比:<


854

被折叠的 条评论
为什么被折叠?



