位域的使用

来源:互联网 发布:眼霜有用吗 知乎 编辑:程序博客网 时间:2024/05/16 10:47

1.下面的程序在INTEL机子上运行

 

struct   B  
      {  
          union    
          {  
                struct  
                {  
                    unsigned   int   i:2;  
                    unsigned   int   j:3;  
                    unsigned   int   k:3;  
                }X;  
                 
                unsigned   char   c;  
          };  
      };  
      B   m;  
      m.c   =200;  
      printf("%d/n",m.X.k);  

答:

  m.c   =200;  
  200  二进制:   11001000   
   
  Intel是小端机, m.X.i   占两位是:   00   即为0   
                         m.X.j   占三位是:   010   即为2   
                         m.X.k   占三位是:   110   即为6  

2.

 

typedef struct
  {
     int a:2;
     int b:2;
     int c:1;
  }test;

  test t;
  t.a = 1;
  t.b = 3;
  t.c = 1;

  printf("%d",t.a);
  printf("%d",t.b);
  printf("%d",t.c);



t.a为01,输出就是1
t.b为11,输出就是-1
t.c为1,输出也是-1
3个都是有符号数int嘛。
这是位扩展问题
01
11
1
编译器进行符号扩展

原创粉丝点击