【问题标题】:Conditional statement in Objective C with two comparison operators in a single clauseObjective C 中的条件语句,在单个子句中有两个比较运算符
【发布时间】:2012-03-12 08:45:58
【问题描述】:

我最近一直在学习 Objective C,并且遇到了一些在 iPhone 应用程序中使用加速度计的代码。它完美地工作;但是,代码中有一个我根本无法理解的 if 语句(含义和它的工作原理)。具体块是这样的:

if (0.2f < deviceTilt.y > -0.2f){position.x = 0;}

我只是不知道条件,而且我以前没有见过在一个子句中使用两个比较运算符。

希望有人能帮帮我!

PS:整个项目可以在这个链接中找到:http://www.ifans.com/forums/showthread.php?t=151394

【问题讨论】:

    标签: objective-c if-statement conditional boolean


    【解决方案1】:

    这被评估为:

    y := .1

    if ((.2 < y) > -.2)
    
    if (false > -.2)
    

    false 被视为 int

    if (0 > -.2)
    
    if (true)
    

    y := .3

    if ((.2 < y) > -.2)
    
    if (true > -.2)
    

    true 被视为 int

    if (1 > -.2)
    
    if (true)
    

    -> 总是正确的


    很可能是这个意思:

    if ((.2 < y) && (y > -.2))
    

    【讨论】:

    • 是的,我认为他们也是这个意思......现在我知道这意味着我不会使用那种“快捷方式”,因为它在阅读代码时可能会造成混淆。感谢您的回答!
    • 我不知道这个,但我绝对喜欢它,而且我会更频繁地使用它。这更像是我们在数学中习惯于定义变量的界限。
    【解决方案2】:

    这当然是非典型的,大多数人不会喜欢它。要真正了解发生了什么,您必须了解 C 的运算符优先级。请参阅:http://www.swansontec.com/sopc.html

    让我们分析一下知道条件从左到右关联的语句:

    1) 0.2f

    2) (1) 的结果 > -0.2f。这应该永远是正确的。

    所以这与 if(1) 相同或始终为真

    【讨论】:

    • 非常感谢!我删除了不必要的部分,所以现在对我来说很有意义。
    猜你喜欢
    • 2017-09-20
    • 2018-11-10
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 2012-01-26
    相关资源
    最近更新 更多