首页/计算机组成原理/指令系统/大端小端存放 🔗 在 Obsidian 中打开
计算机组成原理 · 指令系统

大端小端存放

重要度 ⭐⭐⭐指令系统大端小端字节序存储
速查
大端:高位字节存低地址;小端:低位字节存低地址。网络字节序 = 大端;x86、ARM(默认)为小端。判断:存入 `0x12345678`,首地址是 `0x12` 则大端、`0x78` 则小端。

核心概念

大端模式(Big Endian)

高位字节存放在低地址,数据的「大端」(高位)在前。

例:32 位整数 0x12345678 存放在起始地址 0x100

地址:  0x100  0x101  0x102  0x103
内容:  0x12   0x34   0x56   0x78
        ↑高位                  ↑低位

小端模式(Little Endian)

低位字节存放在低地址,数据的「小端」(低位)在前。

地址:  0x100  0x101  0x102  0x103
内容:  0x78   0x56   0x34   0x12
        ↑低位                  ↑高位

直观理解

  • 大端:符合人类阅读习惯(从左到右,高位在前)
  • 小端:符合计算机处理习惯(低位在低地址,便于低位运算)
  • 网络字节序 = 大端(「网络序是大端序」)

判断方法

int x = 0x01;  // 0x00000001
char *p = (char*)&x;
if (*p == 1)   // 低地址存 0x01 → 小端
    printf("Little Endian");
else           // 低地址存 0x00 → 大端
    printf("Big Endian");

关键性质

性质大端小端
高位字节低地址高地址
低位字节高地址低地址
人类阅读直观(高位在前)需反转
计算机处理无特殊优势低位运算方便
网络传输标准(网络字节序)需要转换
代表架构PowerPC, SPARC, 网络x86, ARM(默认)

常见考法

考法解题套路
给地址内容判断大/小端看首地址存的是高位还是低位字节
大端转小端字节序反转
写出存储布局大端:从高到低;小端:从低到高
网络传输中的字节序发送前转大端(htonl),接收后转小端(ntohl)
给定值写出各地址内容分解字节 → 按大/小端排列

计算示例

地址大端内容小端内容
0x0000x120x78
0x0010x340x56
0x0020x560x34
0x0030x780x12

易错点

必记
  • 大端 $\neq$ 大端在后:大端是「大端(高位)在前(低地址)」。
  • 网络字节序是大端,不是小端。
  • 同一个 32 位数据,大端和小端的字节内容相同,只是排列顺序不同。
  • 单字节数据没有大端小端之分
  • ARM 默认小端,但可配置为大端。

核心结论

  1. 大端:高位字节在低地址;小端:低位字节在低地址。
  2. 网络字节序 = 大端。
  3. x86 和 ARM(默认)是小端。
  4. 大小端只影响多字节数据的字节排列,不影响单字节。
  5. 跨平台通信需注意字节序转换。

记忆卡片

大端和小端的核心区别?
大端高位在低地址,小端低位在低地址。
网络字节序是什么?
大端。
x86 是大端还是小端?
小端。
如何用代码判断大小端?
存入 0x01,看首地址的字节值;0x1234 大端低地址存 0x12(高位)。

交互动画 · 字节序对照

大端存储 — 0x12345678 橙 = 高字节 绿 = 低字节 0x120x100 0x340x101 0x560x102 0x780x103
选择大端 / 小端,观察 0x12345678 各字节的排列
提示:切到并列对比查看两种布局差异

相关知识点

data-alignment instruction-format

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。