作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个使用位标志的枚举声明,但我不知道如何使用它。
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;
然后使用按位与(&
)来测试是否设置了标志:
if ( pinkColor & kRed )
{
// do something
}
&
的结果只有在 两个 操作数中设置相同的位时才会设置任何位。由于 kRed
中唯一的位是位 1,如果其他操作数也没有设置该位,结果将为 0。
如果您需要获取特定标志是否设置为 BOOL
而不是立即在 if
条件下测试它,请比较按位 AND 的结果测试位:
BOOL hasRed = ((pinkColor & kRed) == kRed);
关于objective-c - 如何使用带有位标志的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3524362/
我是一名优秀的程序员,十分优秀!