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