int checkCPU()
{
union
{
int a;
char b;
}c;
c.a = 1;
return (c.b == 1); // 小端返回TRUE,大端返回FALSE
}
这个就不详细解释了,用来判定CPU大小端模式的一个经典例子。
问题4
union {
int a[2];
long b;
char c[4];
}s;
main()
{
s.a[0]=0x12345678;
s.a[1]=0x23456789;
printf("%lx\n",s.b);
printf("%x,%x,%x,%x\n",s.c[0],s.c[1],s.c[2],s.c[3]);
}
答案是:
12345678
78,56,34,12
问题5
# include
main()
{
union {
long i;
int k;
char ii;
char s[4];
} mix ;
mix.k=0x23456789;
printf("mix.i=%lx\n",mix.i);
printf("mix.k=%x\n",mix.k);
printf("mix.ii=%x\n",mix.ii);
printf("mix.s[0]=%x\tmix.s[1]=%x\n",mix.s[0],mix.s[1]);
printf("mix.s[2]=%x\tmix.s[3]=%x\n",mix.s[2],mix.s[3]);
return 0;
}
答案是:
mix.i=23456789
mix.k=23456789
mix.ii=ffffff89
mix.s[0]=ffffff89 mix.s[1]=67
mix.s[2]=45 mix.s[3]=23
出现f是因为把char型强制转换成int型输出,0x89最高位1000 1001最高位为1,转换为int类型的时候认为是负数,而且数在计算机中是按补码存储的,所以自然高位补1了。