辅导:C语言里的位域
来源:优易学  2011-9-23 12:27:36   【优易学:中国教育考试门户网】   资料下载   IT书店

  C语言里的位域是一个比较复杂的问题,涉及的方面也比较多,关于位域的基础内容可以参考以下文章:理解C语言位域
  分析代码如下:
  #include "stdio.h"
  #include "memory.h"
  struct BitSeg1{
  int a:4;
  int b:3;
  };
  struct BitSeg2{
  char a:4;
  char b:3;
  };
  int main()
  {
  struct BitSeg1 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(BitSeg1));
  printf("第二次赋值后: a的值为:%d\tb的值为:%d\n",ba1.a,ba1.b);
  printf("BitSeg1的字节数为: %d\n",sizeof(BitSeg1));
  printf("BitSeg2的字节数为: %d\n",sizeof(BitSeg2));
  return 0;
  }
  输出结果为:
  第一次赋值后: a的值为:1 b的值为:2
  第二次赋值后: a的值为:4 b的值为:-2
  第二次赋值后: a的值为:0 b的值为:3
  BitSeg1的字节数为: 4
  BitSeg2的字节数为: 1
  代码中的BigSeg1定义了两个int类型的字段,而且它们分别只占用4位和3位的空间。当BitSeg1中的a,b分别赋值为1和2时,输出的结果也如我们所料。当第二次赋值为100和30时,输出的结果却是4和-2,为什么呢?

[1] [2] [3] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训