typedef struct AA
{
int b1:5;
int b2:2;
}AA;
AA aa;
char cc[100];
strcpy(cc,"0123456789");
memcpy(&aa,cc,sizeof(AA));
printf("%d/n%d/n", aa.b1, aa.b2);
答案是-16, 1
首先sizeof(AA)的大小为4,b1和b2分别占5bit和2bit.
经过strcpy和memcpy后,aa的4个字节所存放的值是:
0,1,2,3的ASC码,即00110000,00110001,00110010,00110011
所以,最后一步:显示的是这4个字节的前5位,和之后的2位
分别为:10000,和01
因为int是有正负之分 所以:答案是-16和1
结构的大小就是所有成员的大小之和
上面是特殊情况,每个成员的大小必须是字节的整倍数,当不够时,会取int的整数倍)
如果没有成员,其大小为8
本文探讨了位字段(bit field)在结构体中的使用,以及如何通过memcpy进行内存拷贝,并解释了位字段在不同情况下所占用的空间大小。特别地,文章详细分析了一个具体的例子,说明了如何从字符数组中拷贝数据到包含位字段的结构体,并解释了最终输出结果的原因。
806

被折叠的 条评论
为什么被折叠?



