Oys*_*sio 25 cocoa enums objective-c
我有一个使用位标志的枚举声明,我无法弄清楚如何使用它.
enum
{
kWhite = 0,
kBlue = 1 << 0,
kRed = 1 << 1,
kYellow = 1 << 2,
kBrown = 1 << 3,
};
typedef char ColorType;
Run Code Online (Sandbox Code Playgroud)
我想将多种颜色存储在一起colorType
我应该OR
将这些位一起存储?
ColorType pinkColor = kWhite | kRed;
Run Code Online (Sandbox Code Playgroud)
但是假设我想检查是否pinkColor
包含kRed
,我该怎么做?
有人想用我提供的ColorType
例子给我一个例子吗?
wal*_*lky 33
是的,使用按位OR(|
)来设置多个标志:
ColorType pinkColor = kWhite | kRed;
Run Code Online (Sandbox Code Playgroud)
然后使用按位AND(&
)来测试是否设置了一个标志:
if ( pinkColor & kRed )
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
&
只有在两个操作数中设置了相同的位时,才会设置任何位的结果.由于唯一的位kRed
是位1,如果另一个操作数也没有设置此位,则结果将为0.
如果您需要获取特定标志是否设置为a BOOL
而不是仅在if
条件中立即测试它,请将按位AND的结果与测试位进行比较:
BOOL hasRed = ((pinkColor & kRed) == kRed);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11031 次 |
最近记录: |