大端/小端模式

241 阅读2分钟

大小端原因

为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C语言中除了8bitchar之外,还有16bitshort型32bitlong型(要看具体的编译器),另外,对于位数大于 8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式小端存储模式

简述

  1. 大端模式:字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中,读取时从左往右读;
  2. 小端模式:字数据的低字节存储在低地址中,而字数据的高字节则存放在高地址中,读取时从右往左读;
  3. 大端模式进行数据存放符合人类的正常思维,而小端模式进行数据存放利于计算机处理;
  4. 采用大端还是小端与CPU设计编译器的实现都有关系,但就像吃鸡蛋不管是从大端开始打碎,还是小端开始打碎,数据储存顺序的分歧并不会影响实际的数据读取

区别

我们以16位宽的数0x1234举例假设他们的起始地址:0X6000;

1. 在小端模式CPU内存中存放方式

内存地址0X60000X6001
存放内容0X340X12

读取时从右向左读;

2. 在大端模式CPU内存中存放方式

内存地址0X60000X6001
存放内容0X120X34

读取时从左向右读;