【问题标题】:Java modulus operator - why is the result unexpected?Java 模运算符 - 为什么结果出乎意料?
【发布时间】:2011-02-05 10:08:07
【问题描述】:

我知道在模数 17/12 = 5 中。

为什么4+17 % 2-1的值为4,而(4+17) % 2-1的值为0

【问题讨论】:

    标签: java expression operator-precedence modulus


    【解决方案1】:

    运算符优先级。 % 首先被评估,所以

    4 + 17 % 2 - 1
    

    等价于

    4 + (17 % 2) - 1
    

    17%2 == 1 产生 4+1-1 等于 4

    当你把括号放在那里时,你改变了评估的顺序:

    (4+17) % 2 - 1
    

    等价于

    21 % 2 - 1
    

    同样,由于 % 的优先级高于 -,因此产生

    1 - 1
    

    这是0

    【讨论】:

      【解决方案2】:

      4+17 % 2-1 被解释为4+(17 % 2)-1 = 4 + 1 -1 = 4(% 运算符的优先级高于+-

      (4+17) % 2-1 = 21 % 2 -1 = (21 % 2)-1 = 1-1 = 0

      【讨论】:

        猜你喜欢
        • 2011-11-24
        • 2014-04-02
        • 2022-08-02
        • 2020-09-26
        • 2021-03-25
        • 1970-01-01
        • 1970-01-01
        • 2016-09-03
        • 1970-01-01
        相关资源
        最近更新 更多