位域的使用

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
编译器进行符号扩展

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值