为什么会出现大端序和小端序?

💡 1. 源头:硬件工程师与人的思考差异

当你写下数字 1234 时:

  • 人类的视角(大端序思想):“高位在前”。最左边的 1 是千位(最重要),最右边的 4 是个位。我们习惯从左往右读写,所以很自然地想把 1 放在内存的最前面(低地址)。

  • CPU 算术电路的视角(小端序思想):“低位在前”。CPU 做加减法运算时(比如小学竖式加法),永远是从个位开始算起,有了进位再往高位加。

这就产生了根本的分歧:

假设一个 32 位数字 0x12345678 存放在内存地址 0x00 - 0x03:

内存地址:    0x00    0x01    0x02    0x03
          +-------+-------+-------+-------+
大端序 (BE):| 0x12  | 0x34  | 0x56  | 0x78  |  --> 顺着人的读写习惯
          +-------+-------+-------+-------+
小端序 (LE):| 0x78  | 0x56  | 0x34  | 0x12  |  --> 顺着 CPU 算术电路的加法顺序
          +-------+-------+-------+-------+

🛠️ 2. 两种门派各有什么硬件优势?

在早期芯片资源极其紧张、半导体工艺昂贵的时候,每一个逻辑门电路都要精打细算。两派设计者基于不同的硬件设计哲学做出不同的选择:

小端序(Little-Endian)的优势:电路设计极简、类型转换高效

  • 加法计算更快:CPU 读取内存是从低地址递增读取的(0x00\rightarrow 0x01\rightarrow 0x02)。小端序让低地址直接存放最低有效位,加法器读到第一个字节就可以立刻开始计算并处理进位,不需要等待全部字节读完。

  • 强制类型转换零开销

    在 C 语言中,如果你把一个 64 位整数(uint64_t)强制转换为 32 位整数(uint32_t):

    • 小端序下,32 位数值和 64 位数值的首地址完全一致(都是低位字节所在的位置),CPU 只需要改变一下读取指令的长度即可,不需要移动指针

    • 大端序下,首地址必须向后偏移 4 个字节,CPU 必须重新计算指针位置。

大端序(Big-Endian)的优势:符号判断与直观检查

  • 正负号判断极快:判断一个补码整数是正数还是负数,只需要看最高位(符号位)。在大端序中,符号位就在首字节(0x00 地址),芯片一读取第一个字节就能立刻确定正负。

  • 数值大小比较更顺畅:比较两个多字节数的大小时,大端序可以从首字节开始逐字节对比(像比较字符串字典序一样),一旦发现不相等就能提前结束。

⚔️ 3. 历史上的“格列佛游记”之战与现状

“Endian” 这个词其实来自著名讽刺小说《格列佛游记》(Gulliver's Travels):

小人国里的人因为剥鸡蛋应该从大头切开(Big-endian)还是从小头切开(Little-endian)而爆发了多年残酷的战争。

1980 年,计算机科学家 Danny Cohen 发表了一篇名篇《论圣战:关于网络字节顺序的祈祷》(On Holy Wars and a Plea for Peace),借用这个梗将两种字节序命名为 Big-EndianLittle-Endian

当时计算机界形成了两大阵营:

  • 大端派:IBM 大型机、Motorola 68000、Sun SPARC 等传统高端工作站和网络设备厂商。

  • 小端派:Intel(x86 架构)、MOS Technology (6502 芯片,用于 Apple II/FC红白机)。

现在的胜负结果如何?

  1. 个人终端/服务器:小端序(Little-Endian)绝对统治

    随着 Intel x86 芯片风靡 PC 时代,以及后来 ARM 架构(虽然支持双端,但绝大多数操作系统如 Android、iOS、Linux 都默认运行在小端模式)统一移动端,今天绝大多数终端设备(PC、手机、服务器)都是小端序

  2. 网络传输:大端序(Big-Endian)成为既定标准

    当年制定网络协议(TCP/IP)的工程师们认为,网络传输应该追求人类可读性和逻辑直观,因此规定:所有网络协议头部的数值必须是大端序(称为 Network Byte Order)。直到今天,任何设备在发送网络包时,都需要把主机字节序转为大端序发出去。

💡 总结

之所以出现大端和小端:

  1. 大端序 是为了符合人类的认知习惯网络传输的直观性

  2. 小端序 是为了简化硬件电路设计提高 CPU 算术运算效率

这是早期计算机先驱们在“人机友好”与“硬件性能”之间做出的不同权衡,并最终演变为延续至今的工业标准。


为什么会出现大端序和小端序?
https://blog.cikaros.cn/archives/wei-shi-me-hui-chu-xian-da-duan-xu-he-xiao-duan-xu
作者
Cikaros
发布于
2026年08月04日
许可协议