gpt4 book ai didi

c - C 中的位域 - 对齐与初始化

转载 作者:行者123 更新时间:2023-11-30 19:54:33 25 4
gpt4 key购买 nike

作为位域新手,我需要一些关于我在网上看到的各种示例的建议。我想使用位字段而不是位掩码来提高可读性,并便于以后为新的 ppl 进行维护。

这是声明位域的常用方法:

typedef enum 
{
unsigned int x: 1;
unsigned int y: 1;
}statusBits1;

到目前为止一切顺利,然后我看到了:

typedef enum 
{
unsigned int x = 1 << 0,
unsigned int y = 1 << 1
}statusBits2;

根据我的学习,我相信这设置了任何 statusBits2 数据类型的默认值。这是否也会像 statusBits1 一样将 x 和 y 的大小设置为 1 位字段?我正在寻找两者的结合。

提前致谢。

编辑:谢谢您的回答!你强制我重读我一直在学习的东西。我混合了有关位域和位掩码的各种帖子的信息!

即这些:

Declaring and checking/comparing (bitmask-)enums in Objective-C

bitwise indexing in C?

http://forum.codecall.net/topic/56591-bit-fields-flags-tutorial-with-example/

我在 C#/C++ 工作了几年,现在又回到了 C,并重新学习了一些小技巧。

最佳答案

您的第一个示例并不表示位字段。这将是一个struct而不是一个enum

在较新的 C++ 中,您可以为结构成员定义默认值:

typedef struct
{
unsigned int x = 1 << 0; /* Default value 1 << 0 = 1 */
unsigned int y = 1 << 1; /* Default value 1 << 1 = 2 */
} statusBits2;

然而,这在标准 C 和较旧的 C++ 标准中是不可能的,并且不会设置字段宽度。您还可以设置字段宽度:

typedef struct
{
unsigned int x : 1; /* Field width 1 bit, no default */
unsigned int y : 1; /* Field width 1 bit, no default */
} statusBits2;

我不知道在 C 或 C++ 中定义默认值和字段宽度的方法。

让我解释一下你的第二个例子的含义(正如你所写的,使用enum):

你的第二个代码几乎表示一个枚举。这是一个整数类型,可以保存一个表示的值。例如:

typedef enum
{
fish = 3,
gorilla = 7,
rabbit = 9
} animal_t;

是一种类型,可以具有值 3、7 和 9 之一,您可以通过它们的名称来使用这些值,例如:

animal_t my_animal = fish;

(事实上它也可以保存其他整数值)。

枚举和结构都可以帮助您的代码更清晰、更具描述性,但不要混淆它们!

您的示例都不是有效的 C 或 C++ 代码。

关于c - C 中的位域 - 对齐与初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31248595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com