小大端模式哪个更符合人的思维?
主机字节序一般分为大端和小端两种,在X86平台上一般采用小端模式。(采用大端方式进行数据存放符合人类的正常思维,而采用小端方式进行数据存放利于计算机处理。)
“小端”和“大端”表示多字节值的哪一端(小端或大端)存储在该值的起始地址。小端存在起始地址,即是小端字节序;大端存在起始地址,即是大端字节序。
1.小端法(Little-Endian)就是低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端。
2.大端法(Big-Endian)就是高位字节排放在内存的低地址端即该值的起始地址,低位字节排放在内存的高地址端。
int a = 0x12 34 56 78;
← 高位字节 ←低位字节
a是四字节的int类型变量,需要占四个字节空间,假设变量a的首地址是0x2000,那么数据存储在地址中的格式如下:
低地址 高地址
0x2000 0x2001 0x2002 0x2003
0x12 0x34 0x56 0x78 大端模式存储(高位字节放低地址)更符合人思维方式
0x78 0x56 0x34 0x12 小端模式存储(低位字节在低地址)
这里画成表格形式:【OP0表示一个32位数据的最高字节MSB(Most Significant Byte),使用OP3表示一个32位数据最低字节LSB(Least Significant Byte)。】
;地址偏移
|
;大端模式
|
;小端模式
|
0x00
|
12(OP0)
|
78(OP3)
|
0x01
|
34(OP1)
|
56(OP2)
|
0x02
|
56(OP2)
|
34(OP1)
|
0x03
|
78(OP3)
|
12(OP0)
|
如果将一个16位的整数0x1234存放到一个短整型变量(short)中。这个短整型变量在内存中的存储在大小端模式由下表所示。
;地址偏移
|
;大端模式
|
;小端模式
|
0x00
|
12(OP0)
|
34(OP1)
|
0x01
|
34(OP1)
|
12(OP0)
|
由上表所知,采用大小模式对数据进行存放的主要区别在于在存放的字节顺序,大端方式将高位存放在低地址,小端方式将高位存放在高地址。采用大端方式进行数据存放符合人类的正常思维,而采用小端方式进行数据存放利于计算机处理。到目前为止,采用大端或者小端进行数据存放,其孰优孰劣也没有定论。
有的处理器系统采用了小端方式进行数据存放,如Intel的奔腾。有的处理器系统采用了大端方式进行数据存放,如IBM半导体和Freescale的PowerPC处理器。不仅对于处理器,一些外设的设计中也存在着使用大端或者小端进行数据存放的选择。