今天在网上看到这样一道题
union V {
struct X {
unsigned char s1:2;
unsigned char s2:3;
unsigned char s3:3;
} x;
unsigned char c;
} v;
v.c = 100;
printf("%d", v.x.s3);
结果是:3
----------------------------------------分割线--------------------------------------------------
原因分析:
unsigned char s1:2; s1分配空间2位
unsigned char s2:3; s2分配空间3位
unsigned char s3:3; s3分配空间3位
联合体V内存位数
8 7 6 | 5 4 3 | 2 1
100转二级制: 0 1 1 0 0 1 0 0
s1 : 0 0
s2: 0 0 1
s3: 01 1
结果:
v.x.s1 = 0
v.x.s2 = 1
v.x.s3 = 3
----------------------------------------分割线--------------------------------------------------