考虑到所有三个变量具有相同的值,可以预期以下比较结果为YES:
NSUInteger count1 = 2;
NSUInteger count2 = 2;
NSUInteger count3 = 2;
BOOL countEqual = (count1 == count2 == count3);
// but: countEqual = NO
Alas countEqual是NO,我想更好地理解为什么以及这个特定问题是否也出现在C或C ++代码中?
我的猜测是:
(count1 == count2) --> YES (1)
(YES == count3) or (1 == count3) --> NO (0)
答案 0 :(得分:7)
您的猜测完全正确,它将从第一次比较中获得结果,并将其与第三个值进行比较。要做到这一点,你需要做
countEqual = (count1 == count2) && (count1 == count3);
答案 1 :(得分:4)
其他海报已经提供了答案,所以我只引用确认它的规范的相关部分:
==
(等于)和!=
(不等于)运算符类似于关系运算符,除了它们的优先级较低。如果指定的关系为真,则每个运算符产生1,如果为假,则产生0。
平等是关联的,所以它被解释为:
count1 == count2 == count3
(count1 == count2) == count3
(1) == count3
0
答案 2 :(得分:1)
==
之类的比较运算符与C语言和其他类C语言不同。
变化:
BOOL countEqual = (count1 == count2 == count3);
为:
BOOL countEqual = (count1 == count2 && count2 == count3);
答案 3 :(得分:0)
你猜对了。将第一次比较的结果与第三次值进行比较。这不是你想要的。