联合

union V
{
struct X
{
unsigned char s1 : 2;
unsigned char s2 : 3;
unsigned char s3 : 3;
} x;

unsigned char c;
};

void main()
{
V v;
v.c = 100;
printf("%d", v.x.s3);
}

定义了一个联合,也就是x和c占用同一个空间,这里面x采用了位域表示方法,也就是s1只占2位,s2占3位,s3占3位,总共8位。而这个空间又可以解释为一个字符c,因此对v.c=100来说,下一句是把这个100占用的空间解释成结构x,而100换成二进制后为01100100,从后往前分别截取2,3,3位分别赋给s1,s2,s3.因此s3获得最高的011,也就是3,输出结果就是3

原文地址:https://www.cnblogs.com/byfei/p/14104365.html