c语言中冒号的用法及举例(C语言结构体成员变量名后加冒号和数字的含义)
c语言中冒号的用法及举例(C语言结构体成员变量名后加冒号和数字的含义) 类型说明符 位域名:位域长度;{有些信息在存储时,并不需要占用一个完整的字节, 只需占一个或几个二进制位。例如一个开关量,只有0和1两种状态, 因此用一位二进位即可,这样可以节省存储空间。所以就催生了“位域”结构,位域将1个字节划分成不同的区域,每个区域都有个位域名(也可以理解为变量名),通过位域名即可访问其中的数据。struct 位域结构名
在阅读代码时,有时会看到定义结构体时,其成员变量会加上冒号和数字,如下图所示。
其实,这是位域操作的表示方法,也就是说后面加上“:1”的意思是这个成员的大小占所定义类型的1 bit。通过sizeof运算法可以看出,结构体worker_t只占一个字节的空间。
sizeof 是一个判断数据类型或者表达式长度的运算符,以字节为单位。
如果把冒号和数字去掉,则可以看到,结构体worker_t占四个字节的空间,如下图所示。
位域的概念有些信息在存储时,并不需要占用一个完整的字节, 只需占一个或几个二进制位。例如一个开关量,只有0和1两种状态, 因此用一位二进位即可,这样可以节省存储空间。
所以就催生了“位域”结构,位域将1个字节划分成不同的区域,每个区域都有个位域名(也可以理解为变量名),通过位域名即可访问其中的数据。
struct 位域结构名
{
类型说明符 位域名:位域长度;
类型说明符 位域名:位域长度;
......
类型说明符 位域名:位域长度;
};
在使用时需要注意以下几点:
- 位域变量的长度不能大于其类型的长度 (sizeof(类型) * 8);
- 不能用于位域字段的操作:取地址操作符&,位域是若干位空间,是没有地址的;
- 位域可以是无名位域,无名位域只能用作填充或调整位置,不能使用。
<stdint.h> 是 C99 中引进的一个标准 C 库的头文件,定义了几种扩展的整数类型和宏,如:
- intN_t:表示长度为N位的整型数;
- uintN_t:表示长度为N位的无符号整型数 。
其中 N 可以为 8,16,32,64。