如何使用带有位标志的枚举

发布于 2024-09-15 07:33:23 字数 483 浏览 3 评论 0原文

我有一个使用位标志的枚举声明,但我无法确切地弄清楚如何使用它。

enum 
{
  kWhite   = 0,
  kBlue    = 1 << 0,
  kRed     = 1 << 1,
  kYellow  = 1 << 2,
  kBrown   = 1 << 3,
};
typedef char ColorType;

我想在一个 colorType 中存储多种颜色,我应该将这些位OR放在一起吗?

ColorType pinkColor = kWhite | kRed;

但是假设我想检查 pinkColor 是否包含 kRed,我该怎么做?

有人愿意给我一个使用提供的 ColorType 示例的示例吗?

I have an enum declaration using bit flags and I cant exactly figure out on how to use this.

enum 
{
  kWhite   = 0,
  kBlue    = 1 << 0,
  kRed     = 1 << 1,
  kYellow  = 1 << 2,
  kBrown   = 1 << 3,
};
typedef char ColorType;

I suppose to store multiple colors in one colorType I should OR the bits together?

ColorType pinkColor = kWhite | kRed;

But suppose I would want to check if pinkColor contains kRed, how would I do this?

Anyone care to give me an example using the provided ColorType example ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

苍景流年 2024-09-22 07:33:23

是的,使用按位或 (|) 设置多个标志:

ColorType pinkColor = kWhite | kRed;

然后使用按位与 (&) 测试是否设置了标志:

if ( pinkColor & kRed )
{
   // do something
}

& 的结果仅当两个操作数中设置了相同的位时, 才会设置任何位。由于 kRed 中唯一的位是位 1,因此如果其他操作数也没有设置该位,则结果将为 0。

如果您需要了解特定标志是否设置为 BOOL,而不是立即在 if 条件下测试它,请将按位 AND 的结果与测试位进行比较:

BOOL hasRed = ((pinkColor & kRed) == kRed);

Yes, use bitwise OR (|) to set multiple flags:

ColorType pinkColor = kWhite | kRed;

Then use bitwise AND (&) to test if a flag is set:

if ( pinkColor & kRed )
{
   // do something
}

The result of & has any bit set only if the same bit is set in both operands. Since the only bit in kRed is bit 1, the result will be 0 if the other operand doesn't have this bit set too.

If you need to get whether a particular flag is set as a BOOL rather than just testing it in an if condition immediately, compare the result of the bitwise AND to the tested bit:

BOOL hasRed = ((pinkColor & kRed) == kRed);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文