typedef struct AA
{
int b1:5;
int b2:2;
}AA;
void main()
{
AA aa;
char cc[100];
strcpy(cc,"0123456789abcdefghijklmnopqrstuvwxyz");
memcpy(&aa,cc,sizeof(AA));
cout << aa.b1 <<endl;
cout << aa.b2 <<endl;
}
对于如下的定义,b1占用的是一个int的低5位,b2占用的是接着的2位。
对于32位系统,int是32位,即4字节,由于vc默认是4字节对齐,所以剩下的位也不会分配给其他变量,所以sizeof(AA)=sizeof(int)=4
b1和b2分别占5位和2位,经过strcpy和memcpy后,aa的4个字节所存放的值是:0,1,2,3的ASCII码,即00110000,00110001,00110010,00110011
所以,最后一步,显示的是这4个字节的前5位和之后的2位,分别是:10000和01
因为Int有正负之分,所以,答案是 -16和1
typedef struct AA
{
int b1:5;
int b2:2;
}AA;
对于如下的定义,sizeof(BB)=sizeof(int)+sizeof(int),对于32位系统,则为8
typedef struct BB
{
int b1;
int b2;
}BB;