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

时间:2010-08-19 17:15:00

标签: objective-c cocoa enums

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

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示例给我一个例子吗?

1 个答案:

答案 0 :(得分:33)

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

ColorType pinkColor = kWhite | kRed;

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

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

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

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

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