什么是大端序,什么是小端序,如何记忆它们!!!
小端序(Little-Endian) 和 大端序(Big-Endian) 是计算机中多字节数据在内存中的两种存储方式,具体区别及记忆方法如下:
1. 定义
-
大端序(Big-Endian)
-
高位字节存于低地址,低位字节存于高地址。
-
示例:数值
0x12345678
在内存中存储为12 34 56 78
(从左到右为低地址到高地址)。
-
-
小端序(Little-Endian)
-
低位字节存于低地址,高位字节存于高地址。
-
示例:数值
0x12345678
在内存中存储为78 56 34 12
。
-
2. 记忆技巧
(1) 名称联想
-
大端序:
-
“大”对应“高位优先”,即 最高有效位(Most Significant Byte, MSB) 放在内存起始(低地址)。
-
类似书写顺序:从左到右,高位在前(如数字
1234
写作1
(千位)在前)。
-
-
小端序:
-
“小”对应“低位优先”,即 最低有效位(Least Significant Byte, LSB) 放在内存起始(低地址)。
-
类似反序书写:从右到左,低位在前(如数字
1234
写作4
(个位)在前)。
-
(2) 生活比喻
-
大端序:
类似于日期格式 “年-月-日”(高位优先),例如2023-10-05
。 -
小端序:
类似于日期格式 “日-月-年”(低位优先),例如05-10-2023
。
(3) 实际例子
-
数值
0xA1B2
的存储:-
大端序:内存顺序为
A1 B2
(高字节A1
在前)。 -
小端序:内存顺序为
B2 A1
(低字节B2
在前)。
-
3. 应用场景
-
大端序:
-
网络传输(网络字节序)、Java虚拟机、PowerPC处理器。
-
-
小端序:
-
x86/x64架构(Intel/AMD处理器)、ARM处理器(可配置)。
-
4. 验证方法(C语言示例)
通过代码查看整型数值在内存中的字节顺序:
#include <stdio.h>int main() {int num = 0x12345678;unsigned char *p = (unsigned char *)#printf("内存字节顺序:");for (int i = 0; i < sizeof(num); i++) {printf("%02X ", p[i]);}return 0;
}
-
大端序输出:
12 34 56 78
-
小端序输出:
78 56 34 12
5. 总结
-
大端序:高位在前,适合人类阅读习惯。
-
小端序:低位在前,硬件处理更高效。
-
记忆口诀:
“大端高位先,小端低位前;网络用大端,Intel是小端。”
通过名称联想、生活类比和代码验证,可牢固掌握两者的区别与应用场景。