位域

简介: 位域。

位域
C 语言的位域(bit-field)是一种特殊的结构体成员,允许我们按位对成员进行定义,指定其占用的位数。

如果程序的结构中包含多个开关的变量,即变量值为 TRUE/FALSE,如下:

struct
{
unsigned int widthValidated;
unsigned int heightValidated;
} status;
这种结构需要 8 字节的内存空间,但在实际上,在每个变量中,我们只存储 0 或 1,在这种情况下,C 语言提供了一种更好的利用内存空间的方式。如果您在结构内使用这样的变量,您可以定义变量的宽度来告诉编译器,您将只使用这些字节。例如,上面的结构可以重写成:

struct
{
unsigned int widthValidated : 1;
unsigned int heightValidated : 1;
} status;
现在,上面的结构中,status 变量将占用 4 个字节的内存空间,但是只有 2 位被用来存储值。如果您用了 32 个变量,每一个变量宽度为 1 位,那么 status 结构将使用 4 个字节,但只要您再多用一个变量,如果使用了 33 个变量,那么它将分配内存的下一段来存储第 33 个变量,这个时候就开始使用 8 个字节。

目录
相关文章
|
6月前
|
编译器 C++
内存对齐与内存开辟。结构体(struct),位段,枚举类型(enum),联合体(union)。
内存对齐与内存开辟。结构体(struct),位段,枚举类型(enum),联合体(union)
38 1
|
6月前
|
存储 网络协议 编译器
c位域
c位域
63 0
|
6月前
|
存储 数据安全/隐私保护 C语言
位域
位域
44 0
|
6月前
位域的使用
位域的使用。
31 1
|
6月前
|
存储 C语言
位域声明
【2月更文挑战第12天】位域声明。
27 1
|
6月前
|
存储 编译器 C语言
自定义类型:结构体(自引用、内存对齐、位段(位域))
自定义类型:结构体(自引用、内存对齐、位段(位域))
|
6月前
|
存储 编译器 C语言
结构体的内存对齐与位段
当我们描述一个人的年龄时我们可以使用,int age = 18;但是如果我们要描述一个人呢?很显然我们无法仅靠一个age就实现对一个人的描述,所以就有了结构体,在结构体中我们可以包含多种类型的数据,这样就可以实现对一个人的描述比如身高、爱好、体重等等
|
11月前
|
编译器 C++
结构体、枚举、位段、联合体详解
结构体、枚举、位段、联合体详解
66 0
|
存储 编译器 C语言
结构体对齐+联合体+位段
结构体对齐+联合体+位段
108 1
|
存储 编译器 C语言
C语言自定义类型一网打尽(结构体、位段/位域、枚举、联合体)
C语言自定义类型一网打尽(结构体、位段/位域、枚举、联合体)
148 0