Big Endian & Little Endian 和位域

Big Endian & Little Endian 和位域
big endian:最高字节在地址最低位,最低字节在地址最高位,依次排列。
little endian:最低字节在最低位,最高字节在最高位,反序排列。

如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为
                big-endian     little-endian
0x0000     0x12              0xcd
0x0001     0x34              0xab
0x0002     0xab              0x34
0x0003     0xcd              0x12

     int  i  =   0x12345678 ;
    cout
<< hex << ( int ) * ( char * ) & i << endl;     // 78,因为i的地址是低字节0x78的地址

x86系列则采用little endian方式存储数据。
C/C++语言编写的程序里数据存储顺序是跟编译平台所在的CPU相关的,而JAVA编写的程序则唯一采用big endian方式来存储数据。



位域也采用了类似little endian的存储方式:
先定义的位域存放在该字节的低位。
#include  < iostream >


using   namespace  std;

union V 

struct X 
  unsigned 
char s1:2
  unsigned 
char s2:3
  unsigned 
char s3:3
}
 x; 
unsigned 
char c; 
}
 v; 

    
int  main()
{
    v.c 
= 44;    // 001 011 00
    cout<<(int)v.x.s1<<endl;    // 0
    cout<<(int)v.x.s2<<endl;    // 3
    cout<<(int)v.x.s3<<endl;    // 1
    return 0;
}

你可能感兴趣的:(Big Endian & Little Endian 和位域)