参考文献

计算机中“大端”“小端”是指什么

  • 大端小端真正引入计算机领域,是来自于一位网络协议的早期开创者Danny Cohen,他第一次使用这两个术语指代字节顺序,后来慢慢被大家广泛接受.

  • 字节顺序说的到底是什么,先复习一个基础知识:

    • 位(bit): 计算机中的最小数据单位,计算机存储的都是二进制0和1.

    • 字节(Byte): 字节是存储空间的基本计量单位,也是内存的基本单位,也是编址单位.例如,一个计算机的内存是4GB,就是该计算机的内存中共有4×1024×1024×1024个字节,意味着它有4G的内存寻址空间.

  • 换算关系:

    • 1 GB = 1024 MB

    • 1 MB = 1024 KB

    • 1 KB = 1024 Bytes

    • 1 Byte = 8 bits

  • 【Q】: 思考一个问题,通常描述32位二进制数据,为什么是用8个十六进制数呢?如0x1A2B3C4D

    • **【A】: **十六进制(hex)是一种逢16进1的进位制.十六进制的数码有1,2,3,4,5,6,7,8,9,A(10),B(11),C(12),D(13),E(14),F(15).
  • **第一种理解: **

    • 4个二进制bit 表示的数值范围是从0000~1111,即0~15, 刚好等同于 一位 16进制数的数值范围0~F(15).

    • 所以可以类推得出:

      • 1Byte = 8bit;即1个字节包含8个二进制bit,8个二进制bit对应需要2位十六进制数来表示(最大值为 0xFF);

      • 4Byte = 32bit; 即4个字节包含32个二进制bit,32个二进制bit对应需要8位十六进制数来表示;(最大值为 0xFFFFFFFF);

  • **第二种理解: **

    • 因为16=2^4(2的4次方),所以1位十六进制数可以转化为4位二进制数,即十六进制的每个字符需要用4位二进制位来表示,如0x0为0000,0xF为1111,即1个16进制数为4位二进制bit.

    • 所以反推32位二进制数换算为十六进制数后的位数就变为32÷4=8位,即32位二进制地址信息需要8位十六进制数表示.

  • **总结下: **

    • 4个二进制位(bit)(不够表示一个字节) = 1个十六进制(hex).

    • 8个二进制位(bit) = 一个字节(Byte) = 2个十六进制(hex).

    • 32个二进制位(bit) = 四个字节(Byte) = 8个十六进制(hex).

  • 所以针对一个32位的数值,如0x1A2B3C4D,总共四个字节,两个十六进制数表示一个字节,高位字节为0x1A,低位字节为0x4D;中间两个字节分别为0x2B0x3C;

  • 数值0x1A2B3C4D想要在计算机中正确使用,就必须要考虑在内存中将其对应的四个字节合理存储.假设内存的地址都是从低到高分配的,那么对于一个数值多个字节顺序存储就有两种存储方式:

    • 方式一、数值的高位字节存放在内存的低地址端,低位字节存放在内存的高地址端:

      1
      2
      3
      4
      5
      内存低地址 --------------------> 内存高地址

      0x1A | 0x2B | 0x3C | 0x4D

      高位字节 <-------------------- 低位字节
    • 方式二、数值的低位字节存放在内存的低地址端,高位字节存放在内存的高地址端:

      1
      2
      3
      4
      5
      内存低地址 --------------------> 内存高地址

      0x4D | 0x3C | 0x2B | 0x1A

      低位字节 --------------------> 高位字节
  • **方式一 ,**我们就称之为 大端模式;即高位字节放在内存的低地址端,低位字节放在内存的高地址端.

  • **方式二 ,**我们就称之为 小端模式;即低位字节放在内存的低地址端,高位字节放在内存的高地址端.

  • **总结下: **

    • 大端小端是不同的字节顺序存储方式,统称为字节序;

    • 大端模式,是指数据的高字节位 保存在 内存的低地址中,而数据的低字节位 保存在 内存的高地址中.这样的存储模式有点儿类似于把数据当作字符串顺序处理: 地址由小向大增加,而数据从高位往低位放.和我们”从左到右“阅读习惯一致.

    • 小端模式,是指数据的高字节位 保存在 内存的高地址中,而数据的低字节位 保存在 内存的低地址中.这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致.

**记忆小技巧: **

  • 大端模式: “【低位】字节却硬要存在【高】地址中“.—“低对高(或高对低),门不当户不对,真令人头大”,记作大端模式.
  • 小端模式: “【低位】字节正好存在【低】地址中”.— “低对低,门当户对,你侬我侬”,记作小端模式.