关于结构体的一个C程序的输出结果

来源:百度知道 编辑:UC知道 时间:2024/07/08 19:51:59
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;
}
请详细给出上面程序的结果的求解过程

aa只占一个字节,所以实际上只拷贝了cc的第一个字符'0'给它.'0'的ASCII码是48,对应的二进制码是00110000,所以aa的实际值就是二进制的00110000.
又aa是位域结构,b1成员占据这个字节的低5位,即10000,b2成员再占据2位,是01.
10000首位是1,看成负数的补码,是-16
01是1.
所以输出为
-16
1