【问题标题】:Objective-C three-way comparison of identical values results to NO - why?Objective-C 对相同值的三向比较结果为 NO - 为什么?
【发布时间】:2011-12-09 14:14:01
【问题描述】:

考虑到所有三个变量都具有相同的值,可以预期以下比较结果为“是”:

NSUInteger count1 = 2;
NSUInteger count2 = 2;
NSUInteger count3 = 2;
BOOL countEqual = (count1 == count2 == count3);
// but: countEqual = NO

唉,countEqual 是否定的,我想更好地理解为什么以及这个特定问题是否也出现在 C 或 C++ 代码中?

我的猜测是:

(count1 == count2) --> YES (1)
(YES == count3) or (1 == count3) --> NO (0)

【问题讨论】:

  • 这是一场快速打字比赛:)
  • 哈哈!发布后 10 秒内回答问题应该有一个“幸运卢克”徽章! :)

标签: objective-c comparison boolean equality


【解决方案1】:

您的猜测完全正确,它将从第一次比较中获取结果,并将其与第三个值进行比较。为此,您需要这样做

countEqual = (count1 == count2) && (count1 == count3);

【讨论】:

    【解决方案2】:

    其他发帖人已经提供了答案,所以我只引用规范中确认它的相关部分:

    ==(等于)和!=(不等于)运算符类似于关系运算符,只是它们的优先级较低。如果指定的关系为真,则每个运算符产生 1,如果为假,则产生 0。

    等式是左结合的,所以它被解释为:

    count1 == count2 == count3
    (count1 == count2) == count3
    (1) == count3
    0
    

    【讨论】:

      【解决方案3】:

      == 等比较运算符在 C 和其他类 C 语言中的工作方式不同。

      变化:

      BOOL countEqual = (count1 == count2 == count3);
      

      到:

      BOOL countEqual = (count1 == count2 && count2 == count3);
      

      【讨论】:

        【解决方案4】:

        你猜对了。第一次比较的结果与第三个值进行比较。这不是你想要的。

        【讨论】:

          猜你喜欢
          • 2019-02-24
          • 2020-02-04
          • 2014-02-03
          • 1970-01-01
          • 1970-01-01
          • 2019-08-24
          • 1970-01-01
          • 1970-01-01
          • 2014-01-19
          相关资源
          最近更新 更多