如果枚举包含多个可能的值,如何将枚举与变量进行比较?
例如:以下枚举
typedef enum {
EnumValueA = 2,
EnumValueB = 3,
EnumValueC = 4,
EnumValueD = (0 | -1)
} EnumValues;
在比较BOOL result = (a == EnumValueD)
之类的变量时,如果NO
,我会获得int a = 0
而YES
会获得int a = -1
。
此外,这个枚举是在一个组件内,所以我无法改变它..如何
如何对0
和-1
?
答案 0 :(得分:4)
你的问题是基于一种误解。这条线
EnumValueD = (0 | -1)
不表示“多个值”。这是一个“按位或”运算符:它对数字0和减1执行一个操作(按位),并产生一个答案。这是一个奇怪的代码(可能与整数字节大小问题有关),但你只需要测试-1。 (如果你真的想要安全,你可以对(0|-1)
进行测试,我想。)
道德:不要将逻辑 - 或||
与按位或运算符|
混淆。
答案 1 :(得分:0)
让它像这样:
typedef enum {
EnumValueA = 1,
EnumValueB = 2,
EnumValueC = 4,
EnumValueD = 8
} EnumValues;
因此,您可以使用逻辑或组合一个值,以便可以有多个值 然后使用逻辑检查是否包含单个值 例如:
EnumValues val= EnumValueD | EnumValueC;
然后读取值:
if(value & EnumValueA)
actionA();
if(value & EnumValueB)
actionB();
if(value & enumValueC)
actionC();
if(value & enumValueD)
actionD();
因此,如果有多个值,将执行多个操作。 如果需要,还可以放置包含多个值的值,而不是使用或:
typedef enum {
EnumValueA = 1,
EnumValueB = 2,
EnumValueC = 4,
EnumValueD = 8,
EnumValueCAndD= 12
} EnumValues;