这是一个示例:
struct field
{
unsigned int a : 8;
unsigned int b : 8;
unsigned int c : 8;
unsigned int d : 8;
};
union test
{
unsigned int raw;
field bits;
};
int main()
{
test aUnion;
aUnion.raw = 0xabcdef;
printf("a: %x \n",aUnion.bits.a);
printf("b: %x \n",aUnion.bits.b);
printf("c: %x \n",aUnion.bits.c);
printf("d: %x \n",aUnion.bits.d);
return 0;
}
现在运行它,我得到:
a: ef
b: cd
c: ab
d: 0
我想我只是不真正了解这里发生的事情。因此,我将raw设置为一个值,并且由于这是一个并集,因此所有其他东西都会从该值中提取出来,因为它们都被设置为小于unsigned int?所以位域是基于原始的?但是如何绘制呢?为什么在这种情况下d:0?
在这里,我将不胜感激。