该种形式出现于结构体或共用体的定义中,是位域定义的标准形式。
其使用方式为
struct DUMMYSTRUCTNAME{
UINT32 cloneGroupId : n;
UINT32 sourceModeInfoIdx : 16;
} DUMMYSTRUCTNAME;
含义为,在结构体DUMMYSTRUCTNAME汇总,成员变量cloneGroupId 占用空间为 n 位。
n为正整数,其值必须小于type类型占用的位数。比如type如果是int,占4字节32位,那么n必须是1~31之间的整数。
对于位域类型的成员,在赋值时如果实际值超过n位所能表达的范围,那么超出部分将会被截掉,只保存低位值。如int var:4,本
身只有4位的空间,如果赋值var = 20, 由于20的二进制值为10100,实际为五位,这时var实际被赋值的就是低四位,0100,即4。
由于C/C++语言中的地址是针对字节计算的,所以位域类型的成员变量不支持取地址操作。
即对于变量v, 如果存在位域成员变量var,那么&a.var是非法的,编译会出错