关于“为什么我们需要使用位域?”这个问题,在谷歌上搜索我发现位域用于标志。
现在很好奇,
- 它是实际使用位域的唯一方法吗?
- 我们是否需要使用位域来节省空间?
一种从书中定义位域的方法:
struct {
unsigned int is_keyword : 1;
unsigned int is_extern : 1;
unsigned int is_static : 1;
} flags;
- 为什么我们使用int?
- 占用了多少空间?
我很困惑为什么我们使用 int
,而不是 short
或小于 int
的东西。
- 据我了解,内存中只占用了 1 位,而不是整个 unsigned int 值。这是对的吗?
原文由 YohanRoth 发布,翻译遵循 CC BY-SA 4.0 许可协议
不,标志不是使用位域的唯一方式。它们也可用于存储大于一位的值,尽管标志更常见。例如:
位域确实节省了空间。它们还允许以更简单的方式设置非字节对齐的值。我们可以使用与在
struct
中设置字段相同的语法,而不是移位和使用按位运算。这提高了可读性。使用位域,您可以编写但是,要将多个独立值存储在一个
int
(或其他类型)的空间中而没有位域,您需要编写如下内容:提高位域的可读性可以说比在这里和那里节省几个字节更重要。
整个
int
的空间都被占用了。我们使用int
因为在很多情况下,这并不重要。如果对于单个值,您使用 4 个字节而不是 1 或 2 个字节,您的用户可能不会注意到。对于某些平台,大小确实更重要,您可以使用占用更少空间的其他数据类型(char
,short
,uint8_t
等)。不,这是不正确的。整个
unsigned int
将存在,即使您只使用其中的 8 个位。