餐厅网站设计,推荐扬中网站建设,沈阳网站定制开发,北京有名的设计公司有哪些一.概念
大端模式#xff08;Big-endian#xff09;#xff1a;高位字节排放在内存的低地址端#xff0c;低位字节排放在内存的高地址端#xff0c;即正序排列#xff0c;高尾端#xff1b;
小端模式#xff08;Little-endian#xff09;#xff1a;低位字节排放在…一.概念
大端模式Big-endian高位字节排放在内存的低地址端低位字节排放在内存的高地址端即正序排列高尾端
小端模式Little-endian低位字节排放在内存的低地址端高位字节排放在内存的高地址端即逆序排列低尾端
例无论是小端模式还是大端模式。每个字节内部都是按顺序排列
1)大端模式
低地址 ----------------- 高地址
0x0A | 0x0B | 0x0C | 0x0D
2)小端模式
低地址 ------------------ 高地址
0x0D | 0x0C | 0x0B | 0x0A
3)下面是两个具体例子
16bit宽的数0x1234在两种模式CPU内存中的存放方式假设从地址0x4000开始存放为
内存地址 小端模式存放内容 大端模式存放内容 0x4000 0x34 0x12 0x4001 0x12 0x34 32bit宽的数0x12345678在两种模式CPU内存中的存放方式假设从地址0x4000开始存放为
内存地址 小端模式存放内容 大端模式存放内容 0x4000 0x78 0x12 0x4001 0x56 0x34 0x4002 0x34 0x56 0x4003 0x12 0x78 4)大端小端没有谁优谁劣各自优势便是对方劣势
小端模式 强制转换数据不需要调整字节内容1、2、4字节的存储方式一样。 大端模式 符号位的判定固定为第一个字节容易判断正负。
二、数组在大端小端模式下的存储 以unsigned int num 0x12345678为例分别看看在两种字节序下其存储情况我们可以用unsigned char buf[4]来表示num Big-Endian: 低地址存放高位如下
低地址
---------------
buf[0] (0x12) -- 高位
buf[1] (0x34)
buf[2] (0x56)
buf[3] (0x78) -- 低位
--------------- 高地址 Little-Endian: 低地址存放低位如下
低地址
---------------
buf[0] (0x78) -- 低位
buf[1] (0x56)
buf[2] (0x34)
buf[3] (0x12) -- 高位
--------------
高地址
三、为什么会有大小端模式之分呢 这是因为在计算机中我们是以字节为单位的每个地址单元都对应着一个字节一个字节为 8 bit。但是在C 语言中除了 8 bit 的char之外还有 16 bit 的 short型32bit的long型要看具体的编译器另外对于位数大于8位的处理器例如16位或者32位的处理器由于寄存器宽度大于一个字节那么必然存在着如果将多个字节安排的问题。大端存储模式和小端存储模式也就应运而生。例如一个16bit的short型 x 在内存中的地址为 0x0010x 的值为0x1122那么0x11位高字节0x22位低字节。对于大端模式就将0x11放在低地址中即0x0010中0x22放在高地址中即0x0011中。小端模式刚好相反。我们常用的X86结构是小端模式而KEIL C51则为大端模式。很多的ARMDSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。