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