结构体位段

Members of structures or unions can also be bit-fields  . A  bit-field   is an integer variable that
consists of a specified number of bits. I f you declare several small bit-fields in succession, the
compiler packs them into a single m achine word. This permits very compact storage of small

units of information.


语法为:

type [member_name] : width  ;

type可为_Bool,int,signed int,unsigned int
memeber_name是可选的,没有成员名的位段是作为 padding 用的

width不要超过type的宽度


一个包含位段的结构体可能占用一个 memory unit,也可能占用多个 memory unit


下面是一个例子:

struct Date { 
              unsigned int month :  4;    // 1 is January; 12 is December.
              unsigned int day   :  5;    // The day of the month (1 to 31).
              signed int   year  : 22;    // (-2097152 to +2097151)
              //Daylight Saving Time是指在夏天天亮较早,这时人为的
              //把时间拨快一小时以节约能源
              _Bool        isDST :  1;    // True if Daylight Saving Time is
                                          // in effect.
}
//虽然用的是位段但可以像其它结构体一样使用
struct Date birthday = { 5, 17, 1982 };
const char *dateAsString( struct Date d )
{
  static char strDate[12];
  //虽然用的是位段,仍可像其它结构体一样使用
  //可以使用结构体的 . 操作
  sprintf( strDate, "%02d/%02d/%04d", d.month, d.day, d.year );
  return s
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值