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