关于联合体的一个问题
#include <stdio.h>int main(void)
{
unsigned int uint;
int sint;
float ft;
char *p;
union
{
unsigned int a;
char b[4];
} un;
un.a=0x77654321;
uint=0x77654321;
p=(char*)&uint;
printf("*p=%x,*p+1=%x,*p+2=%x,*p+3=%x\n",*p,*(p+1),*(p+2),*(p+3));
printf("b[0]%x,b[1]=%x,b[2]=%x,b[3]=%x\n",un.b[0],un.b[1],un.b[2],un.b[3]);
return 0;
}
代码如上所示,我的想法是把无符号整形的四个字节逐个打印出来看,结果发现,如果
数据的最高位不为1,那么显示结果是正确的。比如
un.a=0x77654321;
uint=0x77654321;
得到
*p=21,*p+1=43,*p+2=65,*p+3=77
b[0]21,b[1]=43,b[2]=65,b[3]=77
但是,如果最高位不为1,比如
un.a=0x87654321;
uint=0x87654321;
那么得到的最高字节为一个32bit的数,这是为什么?
*p=21,*p+1=43,*p+2=65,*p+3=ffffff87
b[0]21,b[1]=43,b[2]=65,b[3]=ffffff87
请大家帮忙一起看下,谢谢