什么是共用体?
与结构体不同,共用体的成员变量是共用一片内存,占用的空间大小是这个共用体的最大的成员变量大小,所以一个成员变量改变,将会影响到其他成员变量。
共用体使用场景
使用共有体,共用一片内存,可以节省一定的内存,所有的成员变量的首地址相同。以一种数据类型写入,以类外一种数据读出,例如ip地址、串口数据解析等。常用于操作系统数据结构和嵌入式硬件数据结构
判断是大端还是小端
union Check
{
int a;
char b;
};
int main(int argc,char** argv)
{
union Check check;
check.a = 0;
check.b = 1;
if(check.a == 1)
{
printf("小端存储模式");
}
else
{
printf("大端存储模式");
}
return 0;
}
什么是小端,大端模式?
大端模式:数据的高字节存储到低地址。
小端模式:数据的高字节存储到高地址。
例子1
//小端模式
union Union_Data{
int num;
char data[4];
};
int main(int argc, char** argv)
{
union Union_Data X;
X.num = 0x11223344;//小端向后看,大端向前看
printf("%x\n",X.data[0]);//0x44 还是 0x11
return 0;
}
例子2
union Union_Data
{
int a;
char b;
};
int main(int argc,char** argv)
{
union Union_Data X;
X.a = 255;//0xFF
printf("%d\n",X.b);//-1
X.a = 128;
printf("%d\n",X.b);//-128
return 0;
}
因为char 的数据范围是-128~127,很明显255已经超出了char数据范围,如果是unsigned char(0~255)的话,是可以输出对应的结果。
至于为什么是-1和-128,就要涉及到原码、补码和反码的知识,这里篇幅有限,就不多赘述。有兴趣的小伙伴可以上网了解下。