结构体位段

来源:互联网 发布:java中list嵌套list 编辑:程序博客网 时间:2024/04/28 22:51
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}


原创粉丝点击