位域和sizeof

为什么打印出来的结果是不一样的,unsigned   field3给定不同的位字段打印出来的值不一样,而且既然声明为unsigned   field3为什么按%d打出来还是-4?而sizeof(struct   BitField)的值始终是8,我是在gcc下测试的.  
   
  #include   <stdio.h>  
   
  struct   BitField   {  
          int   field1   :   10;  
          signed   field2   :   8;  
          unsigned   field3   :   24;  
  };  
   
  struct   Bit   {  
          int   field1   :   10;  
          signed   field2   :   8;  
          unsigned   field3   :   32;  
  };  
   
  int   main(void)  
  {  
          struct   BitField   bitfiled;  
          struct   Bit   bit;  
           
          bitfiled.field1   =   -5;  
          bitfiled.field2   =   -3;  
          bitfiled.field3   =   -4;  
          printf("bitfiled.field1   =   %d,   bitfiled.field2   =   %d,   bitfiled.field3   =   %ul/n",    
                          bitfiled.field1,   bitfiled.field2,   bitfiled.field3);  
          printf("sizeof(struct   BitField)   =   %d/n",   sizeof(struct   BitField));  
                                   
          bit.field1   =   -5;  
          bit.field2   =   -3;  
          bit.field3   =   -4;  
          printf("/nbit.field1   =   %d,   bit.field2   =   %d,   bit.field3   =   %ul",    
                          bit.field1,   bit.field2,   bit.field3);  
          printf("/nbit.field1   =   %d,   bit.field2   =   %d,   bit.field3   =   %d/n",    
                          bit.field1,   bit.field2,   bit.field3);  
          printf("sizeof(struct   Bit)   =   %d/n",   sizeof(struct   Bit));  
           
           
          return   0;  
  }  
   
  =======================================================  
   
  执行结果:  
   
  bitfiled.field1   =   -5,   bitfiled.field2   =   -3,   bitfiled.field3   =   16777212l  
  sizeof(struct   BitField)   =   8  
   
  bit.field1   =   -5,   bit.field2   =   -3,   bit.field3   =   4294967292l  
  bit.field1   =   -5,   bit.field2   =   -3,   bit.field3   =   -4  
  sizeof(struct   Bit)   =   8

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值