大端小端的判断

假设从地址0x4000开始存放:

0x12345678,是也个32位四个字节的数据,最高字节是0x12,最低字节是0x78:

在Little-endian模式CPU内存中的存放方式为:

(高字节在高地址, 低字节在低地址)

内存地址

0x4000

0x4001

0x4002

0x4003

存放内容

0x78

0x56

0x34

0x12

 在Big-endian模式CPU内存中的存放方式则为:

(高字节在低地址, 低字节在高地址)

内存地址

0x4000

0x4001

0x4002

0x4003

存放内容

0x12

0x34

0x56

0x78

由上表所知,

采用大小模式对数据进行存放的主要区别在于在存放的字节顺序,大端方式将高位存放在低地址,小端方式将高位存放在高地址。

采用大端方式进行数据存放符合人类的正常思维,而采用小端方式进行数据存放利于计算机处理。到目前为止,采用大端或者小端进行数据存放,其孰优孰劣也没有定论。

有的处理器系统采用了小端方式进行数据存放,如Intel的奔腾。有的处理器系统采用了大端方式进行数据存放,如IBM半导体和Freescale的PowerPC处理器。不仅对于处理器,一些外设的设计中也存在着使用大端或者小端进行数据存放的选择。

试题1:请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1

int checkCPU( )
{
       {
                 union w
                 {  
                          int a;
                          char b;
                 } c;
                 c.a = 1;
           return  (c.b ==1);
       }
}

剖析: 

联合体union的存放顺序是所有成员都从低地址开始存放的。

如果是小端如何存储c.a的呢?                                                                 

地址A
------------------------------------
|A        |A+1    |A+2     |A+3   | int a;
|0x01 |0x00   |0x00   |0x00 |
-------------------------------------
|A        |char b;
0x01|
---------         

 如果是大端如何存储c.a的呢?    

地址A
------------------------------------------
|A          |A+1    |A+2      |A+3     |int a;
|0x00   |0x00   |0x00    |0x01    |
------------------------------------------
|A      |char b;
|0x00|
---------          

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值