struct的大小及编码赋值

本文探讨了位字段(bit field)在结构体中的使用,以及如何通过memcpy进行内存拷贝,并解释了位字段在不同情况下所占用的空间大小。特别地,文章详细分析了一个具体的例子,说明了如何从字符数组中拷贝数据到包含位字段的结构体,并解释了最终输出结果的原因。

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

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值