Java 模运算符 - 为什么结果出乎意料?
我理解模数 17/12 = 5
。
为什么4+17 % 2-1
的值为4
,而(4+17) % 2-1
的值为0?
I understand that in modulus 17/12 = 5
.
Why 4+17 % 2-1
the value is 4
, and (4+17) % 2-1
the value is 0
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
运算符优先级。首先评估
%
,因此相当于
17%2 == 1
,它产生4+1-1
,等于4< /code>
当您将括号放在那里时,您会更改求值顺序:
再次相当于
,因为
%
的优先级高于-
,产生的结果是
0
Operator precedence.
%
is evaluated first, sois equivalent to
17%2 == 1
which yields4+1-1
which equals4
When you place brackets there, you change the order of evaluation:
is equivalent to
which again, because of
%
having higher precendence than-
, yieldswhich is
0
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
4+17 % 2-1
is interpreted as4+(17 % 2)-1
=4 + 1 -1
=4
(precedence of % operator is higher than+
and-
)(4+17) % 2-1
=21 % 2 -1
=(21 % 2)-1
=1-1
=0