输出下面这一道题的输出:
struct mybitfields
{
unsigned short a : 4;
unsigned short b : 5;
unsigned short c : 7;
} test
void main(void)
{
int i;
test.a = 2;
test.b = 3;
test.c = 0;
i = *((short *)&test);
printf("%d\n", i);
}
这道题的第一步首先你要清楚“:”的含义,冒号相当于分配几位空间。所以我们就可以知道这里的分配的成员a 4位的空间, b 5位,c 7位,一共是16位,正好两个字节。
首先我们要清楚存储方式是这样的:
当然我们要考虑到在这所采用的是小端字节序,然后取((short )&test),这个意思就是在这里面去了test地址的2个字节,然后进行解引用。最后的结果: