1

如果枚举包含多个可能的值,我如何将枚举与变量进行比较?

例如:对于以下枚举

typedef enum {
    EnumValueA = 2,
    EnumValueB = 3,
    EnumValueC = 4,
    EnumValueD = (0 | -1)
} EnumValues;

当比较像BOOL result = (a == EnumValueD)我这样的变量时NOifint a = 0YESif int a = -1

另外,这个枚举在一个组件内,所以我不能改变它..如何

我怎样才能使这个比较返回 YES0-1

4

2 回答 2

4

你的问题是基于一个误解。线

EnumValueD = (0 | -1)

表示“多个值”。那是一个“按位或”运算符:它对数字零和减一执行操作(按位),并且只产生一个答案。这是一段奇怪的代码(可能与整数字节大小问题有关),但您只需要针对 -1 进行测试。(如果你真的想要安全,你可以测试(0|-1),我想。)

道德:不要将逻辑或||与按位或运算符混淆|

于 2012-12-06T17:28:31.470 回答
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;
于 2012-12-06T17:41:16.700 回答