文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>判断CPU的存储方式之大端、小端

判断CPU的存储方式之大端、小端

时间:2009-05-16  来源:hubo214

采用Little-endian模式(或者说是低位存储法)的CPU对操作数的存放方式是从低字节到高字节,

而Big-endian模式(或者说是高位存储法)对操作数的存放方式是从高字节到低字节。32bit宽的数0x12345678在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址

0x4000

0x4001

0x4002

0x4003

存放内容

0x78

0x56

0x34

0x12

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

内存地址

0x4000

0x4001

0x4002

0x4003

存放内容

0x12

0x34

0x56

0x78

 

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

下面是判断大端和小端的一个程序(来自:http://hi.baidu.com/spbeijilang/blog/item/97dc5b2af0b77093023bf61a.html)

#include <stdio.h>
int checkCPU();

main()
{
  int j;
  j=checkCPU();
  printf("j=%d\n",j);
}

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

在visual C++(intel Celeron(R)cpu 2.80)上的输出为:j=1

 

在C语言参考手册的第六章6.1.2节中提供了一个移植性更好的测试程序:

(稍有改动)

#include <stdio.h>

int main( )
{
        union w
  {  
             int a;
             char b[sizeof(int)]; 
        } c;
        c.a = 1;
  if(c.b[0] == 1)
   printf("the addressing is little-endian\n");
  else if(c.b[sizeof(int)-1] == 1)
   printf("the addressing is big-endian\n");
  return 0;
}

 

 

相关阅读 更多 +
排行榜 更多 +
来逛水族馆

来逛水族馆

音乐节奏 下载
组合战争

组合战争

休闲益智 下载
元美汇

元美汇

购物比价 下载