objective-c - 将枚举与多个值进行比较,而不是按位

标签 objective-c c enums comparison

<分区>

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

例如:对于以下枚举

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

当比较像 BOOL result = (a == EnumValueD) 这样的变量时,如果 int a = 0 我得到 NO 如果 int a = -1

此外,这个枚举在一个组件中,所以我无法更改它..如何

如何使此比较对 0-1 都返回 YES?

最佳答案

您的问题是基于误解。线路

EnumValueD = (0 | -1)

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

寓意:不要将逻辑或 || 与按位或运算符 | 混淆。

关于objective-c - 将枚举与多个值进行比较,而不是按位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13749083/

相关文章:

iphone - 无法执行 segue

c - 如何使用指针反转数组?

java.lang.NullPointerException - Java 服务器和 C 客户端

c# - Linq to SQL DataContext 无法更新数据库中继承对象的枚举字段

typescript - 如何在 Typescript 中获取枚举大小作为类型

swift - 如何在以下情况下 swift 使用枚举?

ios - UIPageViewController 在滚动过去的页面时崩溃

objective-c - Swift转换C的uint64_t与使用自己的UInt64类型不同

ios - 在后台连续运行的iOS游戏

c - 在 C 中对三重指针使用 fread