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 }