Java 模运算符 - 为什么结果出乎意料?

发布于 2024-10-15 21:49:23 字数 136 浏览 4 评论 0原文

我理解模数 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

分開簡單 2024-10-22 21:49:23

运算符优先级。首先评估 %,因此

4 + 17 % 2 - 1

相当于

4 + (17 % 2) - 1

17%2 == 1,它产生 4+1-1,等于 4< /code>

当您将括号放在那里时,您会更改求值顺序:

(4+17) % 2 - 1

再次相当于

21 % 2 - 1

,因为 % 的优先级高于 -,产生

1 - 1

的结果是 0

Operator precedence. % is evaluated first, so

4 + 17 % 2 - 1

is equivalent to

4 + (17 % 2) - 1

17%2 == 1 which yields 4+1-1 which equals 4

When you place brackets there, you change the order of evaluation:

(4+17) % 2 - 1

is equivalent to

21 % 2 - 1

which again, because of % having higher precendence than -, yields

1 - 1

which is 0

梦旅人picnic 2024-10-22 21:49:23

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 as 4+(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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文