现在的位置: 首页 > 综合 > 正文

结构体位段

2013年11月12日 ⁄ 综合 ⁄ 共 884字 ⁄ 字号 评论关闭

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. If 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
}

抱歉!评论已关闭.