这个应该是我理解的最透彻的一次啦
#include <stdio.h> union _data { struct _test { int i:1; int j:2; int k:13; }test; int n; }data; int main () { data.n = 0x1234; printf("%x\n", data.test.i); //0 printf("%x\n", data.test.j); //fffffffe printf("%x\n", data.test.k); //246 printf("%d\n", sizeof(data)); //输出4,这个很容易理解 return 0; }
注:小端模式
data.n=0x1234语句之后,n在内存中的比特位信息如下:
(高地址)00000000 00000000 00010010 00110100(低地址)
上面的信息也就是test的信息,
int i:1表示test的最右边的一个比特位0
int j:2表示int i:1后面的两个比特位的信息10,1表示符号位,将其扩展为int后得到0xfffffffe
int k:13表示int j:2后面的13个比特位的信息00010010 00110,最左边的0表示符号位,将其扩展为int后得到0x00000246