我有一个使用位标志的枚举声明,我无法弄清楚如何使用它。
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
示例给我一个例子吗?
答案 0 :(得分:33)
是的,使用按位OR(|
)来设置多个标志:
ColorType pinkColor = kWhite | kRed;
然后使用按位AND(&
)来测试是否设置了标志:
if ( pinkColor & kRed )
{
// do something
}
只有在两个操作数中设置了相同的位时,&
的结果才会设置任何位。由于kRed
中的唯一位是位1,如果另一个操作数也没有设置此位,则结果将为0。
如果您需要获取特定标志是否设置为BOOL
而不是仅在if
条件下立即测试它,请将按位AND的结果与测试位进行比较:
BOOL hasRed = ((pinkColor & kRed) == kRed);