大小端原因
为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为
8bit
。但是在C语言中除了8bit
的char
之外,还有16bit
的short型
,32bit
的long型
(要看具体的编译器),另外,对于位数大于8位
的处理器,例如16位
或者32位
的处理器,由于寄存器宽度
大于一个字节
,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式
和小端存储模式
。
简述
- 大端模式:字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中,读取时从左往右读;
- 小端模式:字数据的低字节存储在低地址中,而字数据的高字节则存放在高地址中,读取时从右往左读;
- 大端模式进行数据存放符合人类的正常思维,而小端模式进行数据存放利于计算机处理;
- 采用大端还是小端与
CPU设计
、编译器的实现
都有关系,但就像吃鸡蛋不管是从大端开始打碎,还是小端开始打碎,数据储存顺序的分歧并不会影响实际的数据读取
;
区别
我们以16位宽的数0x1234
举例假设他们的起始地址:0X6000;
1. 在小端模式CPU内存中存放方式
内存地址 | 0X6000 | 0X6001 |
---|---|---|
存放内容 | 0X34 | 0X12 |
读取时从右向左读;
2. 在大端模式CPU内存中存放方式
内存地址 | 0X6000 | 0X6001 |
---|---|---|
存放内容 | 0X12 | 0X34 |
读取时从左向右读;