union w
{
int a;
char x[2];
}e;
e.x[0]=10;
e.x[1]=1;
cout<<e.a<<endl;
那么运算结果在little-endian模式中的结果为266,那么原因是什么呢
我个人的理解
小端模式下:
printf("0x%x", e.a); 结果为0x10a
大端模式下:
printf("0x%x", e.a); 结果为0xa01
由于是小端模式,那么char x[0]肯定是指向最低的地址的,那么我们假设低地址为4000,那么在400存的数据就是10,以十六进制表示就是0x0a;然4001地址存放的就是0x01;由于存放的最大数据类型是Int型,占有四个字节,因此,地址知道4003;都是0x00;那么在小端模式中的低地址存放的是低字节,因此,
4000 0x0a;
4001 0x01;
4002 0x00;
4003 0x00;
因此可得数据为ox10a;对应的十进制为266;