操作系统 大端和小端(Big endian and Little endian)

昨天在牛客刷到的一道题

如果在地址a存储的整形值时0x04030201,那么地址为a+3的字节内存储的值在big-endian和little-endian结构下的值分别是?

endian这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。

我们一般将endian翻译成–字节序,将big endian和little endian称作“大端”和“小端”

对于整型、长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节);而 Little endian 则相反,它认为第一个字节是最低位字节(按照从低地址到高地址的顺序存放据的低位字节到高位字节)。

  • Little-endian:将低序字节存储在起始地址(低位编址)
  • Big-endian:将高序字节存储在起始地址(高位编址)

例子1:在内存中双字0x01020304(DWORD)的存储方式。

内存地址    4000 4001 4002 4003 LE      04   03   02   01 BE      01   02   03   04 

注:每个地址存1个字节,每个字有4个字节。2位16进制数是1个字节(0xFF=11111111)

例子2:如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为
   

         big-endian   little-endian
0x0000    0x12         0xcd
0x0001    0x23         0xab
0x0002    0xab         0x34
0x0003    0xcd         0x12

一般来说,x86 系列 CPU 都是 little-endian 的字节序,PowerPC 通常是 big-endian,网络字节顺序也是 big-endian还有的CPU 能通过跳线来设置 CPU 工作于 Little endian 还是 Big endian 模式。


非常简单的概念 还是记一下

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注