辅导:C语言里的位域,第1张

辅导:C语言里的位域,第2张

C语言中的位域是一个复杂的问题,涉及很多方面。关于位域的基本内容,请参考下面这篇文章:理解C语言中位域的分析代码
如下:
# include " stdio . h "
# include " memory . h "
struct bit seg。
int b:3;
};
struct bit seg 2 {
char a:4;
char b:3;
};
int main()
{
struct bit seg 1 ba1;
ba1 . a = 1;
ba1 . b = 2;
printf("第一次赋值后:a的值是%d\tb是%d\n ",ba1.a,ba1 . b);
ba1 . a = 100;
ba1 . b = 30;
printf("第二次赋值后:a的值是%d\tb是%d\n ",ba1.a,ba1 . b);
char str[]= " 0123 ";
memcpy(&ba1,str,sizeof(bitse G1));
printf("第二次赋值后:a的值是%d\tb是%d\n ",ba1.a,ba1 . b);
printf("BitSeg1有% d \ n个字节",sizeof(bitse G1));
printf("BitSeg2有% d \ n个字节",sizeof(bit seg 2));
返回0;
}
输出结果为:
第一次赋值后,A的值为:1 b为:2
第二次赋值后,A的值为:4 b为:-2
第二次赋值后,A的值为:0。BitSeg2的字节数为:1
。代码中的BigSeg1定义了两个int类型的字段,它们分别只占用4位和3位的空。当BitSeg1中的a和b分别赋值为1和2时,输出结果如预期。当第二次赋值为100和30时,输出结果为4和-2。为什么?

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 辅导:C语言里的位域

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情