那些是位字段。基本上,冒号后面的数字描述该字段使用多少位。这是描述位字段的quote from MSDN:
常量表达式指定字段的宽度(以位为单位)。声明的 类型说明符必须是unsigned int,signed int或int,并且常量表达式必须是非负整数值。 如果该值为零,则该声明没有声明。位 字段,位字段指针和返回位字段的函数的数组是 不允许。可选的声明符命名位域。位域 只能声明为结构的一部分。运算符地址 (&)不能应用于位域组件。
未命名的位字段不能被引用,并且它们在运行 时的内容是不可预知的。对于 对齐目的,它们可以用作“虚拟”字段。其宽度被指定为0 的未命名位字段保证在 结构声明列表中的后面的成员的存储在int边界上开始。
本示例定义了一个名为screen的结构的二维数组。
struct
{
unsigned short icon : 8;
unsigned short color : 4;
unsigned short underline : 1;
unsigned short blink : 1;
} screen[25][80];
编辑:从MSDN链接另一个重要的一点:
位字段具有相同的语义整数类型。这意味着 位字段在表达式中使用的方式与使用相同基本类型的变量 的方式完全相同,无论位字段中有多少位为 。
一个快速示例很好地说明了这一点。有趣的是,对于混合类型,编译器似乎默认为sizeof (int)
。
struct
{
int a : 4;
int b : 13;
int c : 1;
} test1;
struct
{
short a : 4;
short b : 3;
} test2;
struct
{
char a : 4;
char b : 3;
} test3;
struct
{
char a : 4;
short b : 3;
} test4;
printf("test1: %d\ntest2: %d\ntest3: %d\ntest4: %d\n", sizeof(test1), sizeof(test2), sizeof(test3), sizeof(test4));
测试1:4
测试2:2
TEST3:1
TEST4:4
[位域在C](http://en.wikipedia.org/wiki/C_syntax#Bit_fields)。 – birryree 2011-12-19 16:47:30
请参阅http://en.wikipedia.org/wiki/Bit_field – 2011-12-19 16:48:32
“FOUR_RESERVED_BITS:8”... – RJFalconer 2011-12-19 16:53:49