C/C++定义变量后面加冒号,数字什么意思

该种形式出现于结构体或共用体的定义中,是位域定义的标准形式。
其使用方式为

struct name
{
	type var_name : n;
};

含义为,在结构体name汇总,成员变量var_name占用空间为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是非法的,编译会出错。

posted @ 2019-09-11 15:31  老耗子  阅读(701)  评论(0编辑  收藏  举报