大端序和小端序
create: 2023-12-16
字节顺序,又称端序或尾序(Endianness),指电脑内存中或在数字通信链路中,组成多字节的字的字节的排列顺序。
基本介绍
首先我们设想一个场景:使用编程语言定义了一个整型(int)变量 x,它在内存中占据 32 bit,也就是 4 个字节,假设 x 的值是 0x1A2B3C4D,十进制为 439,041,101。在内存中 x 就会占据 0x100, 0x101, 0x102, 0x103 四个地址,指针 &x 值即为 0x100。这个时候我们将会有两种排序:
从图中可以看到两种排序方式:
- 大端序(big-endian) 低位地址存入高位字节,高位地址存入低位字节;
- 小端序(little-endian) 低位地址存入低位字节,高位地址存入高位字节。
为何需要它们
为什么我们需要分大端序和小端序呢?大端序看上去更符合人类的直觉,为什么不统一使用大端序?这是因为在数学计算上,需要先处理低位数据,比如 23 + 57,先需要处理 3+7,再处理 2+5。而计算机是先处理低位字节的,所以当使用小端序的时候,正好符合计算机运算的逻辑,效率也会比大端序要高,所以在 CPU 中,一般使用小端序,比如我们熟知的 x86 处理器使用的就是小端序。在网络体系中,一般使用大端序,也就是高位字节优先发送,比如 IP 协议定义大端序为网络字节序。
混合序
除此之外,字节序还有混合序,例如:
本文目录