cpu大小端详解

cpu大小端详解

  • 大小端
    • 大端(Big-Endian)释义
    • 小端(Little-Endian)释义
    • 举例
      • 大端(Big-Endian)
      • 小端(Little-Endian)
  • 大小端应用情况
    • Intel的80x86系列芯片
    • ARM芯片
    • MIPS芯片
    • C语言
    • java语言
    • 网络传输数据

大小端

大端(Big-Endian)释义

数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中
这样的存储模式有点儿类似于把数据当作字符串顺序处理:
地址由小向大增加,而数据从高位向低位存储,这和我们的阅读习惯一致
低地址部分权值高,高地址部分权值低,这和我们的逻辑方法相反
记忆:地址的增长顺序与地址权值的增长顺序相反

小端(Little-Endian)释义

数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中
这样的存储模式有点儿类似于把数据当作字符串逆序处理:
地址由小向大增加,而数据从低位向高位存储,这和我们的阅读习惯相反
低地址部分权值低,高地址部分权值高,这和我们的逻辑方法一致
记忆:地址的增长顺序与地址权值的增长顺序一致

举例

以unsigned int value = 0x12345678为例,用unsigned char buf[4]来表示value

大端(Big-Endian)

高地址
buf[3] (0x78) – 低位
buf[2] (0x56)
buf[1] (0x34)
buf[0] (0x12) – 高位
低地址

小端(Little-Endian)

高地址
buf[3] (0x12) – 高位
buf[2] (0x34)
buf[1] (0x56)
buf[0] (0x78) – 低位
低地址

大小端应用情况

Intel的80x86系列芯片

Intel的80x86系列芯片是唯一还在坚持使用小端的芯片

ARM芯片

ARM芯片默认采用小端,但可以切换为大端

MIPS芯片

MIPS芯片要么采用全部大端的方式储存,要么提供选项支持大端——可以在大小端之间切换

C语言

C语言中,默认是小端(但在一些对于单片机的实现中却是基于大端,比如Keil 51C)

java语言

Java是平台无关的,默认是大端

网络传输数据

在网络上传输数据普遍采用的都是大端

你可能感兴趣的:(Misc)