为什么这段程序的运行结果是266?解决方法
为什么这段程序的运行结果是266?
#include "stdafx.h"
#include "stdio.h"
union
{
int i;
char x[2];
}a;
int func(int x);
int _tmain(int argc, _TCHAR* argv[])
{
a.x[0] = 10;
a.x[1] = 1;
printf("%d",a.i);
return 0;
}
------解决方案--------------------
10的二进制 00001010
1的二进制 00000001
整个a的内存情况大致如:.. 00000001 00001010
输出就是256
------解决方案--------------------
这个现象在不同CPU系统中有不同的内存分部,具体如下:
Little endian
31 24 23 16 15 8 7 0
i
x[3] x[2] x[1] x[0]
0x00 0x00 0x01 0x0a
Big endian
31 24 23 16 15 8 7 0
i
x[0] x[1] x[2] x[3]
0x0a 0x01 0x00 0x00
一般我们现在都是little endian的系统,所以是0x00010a=266.(在此问题中x[2],x[3]不存在)
#include "stdafx.h"
#include "stdio.h"
union
{
int i;
char x[2];
}a;
int func(int x);
int _tmain(int argc, _TCHAR* argv[])
{
a.x[0] = 10;
a.x[1] = 1;
printf("%d",a.i);
return 0;
}
------解决方案--------------------
10的二进制 00001010
1的二进制 00000001
整个a的内存情况大致如:.. 00000001 00001010
输出就是256
------解决方案--------------------
这个现象在不同CPU系统中有不同的内存分部,具体如下:
Little endian
31 24 23 16 15 8 7 0
i
x[3] x[2] x[1] x[0]
0x00 0x00 0x01 0x0a
Big endian
31 24 23 16 15 8 7 0
i
x[0] x[1] x[2] x[3]
0x0a 0x01 0x00 0x00
一般我们现在都是little endian的系统,所以是0x00010a=266.(在此问题中x[2],x[3]不存在)