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

0 java expression operator-precedence modulus

我理解模数17/12 = 5.

为什么4+17 % 2-1价值4,(4+17) % 2-1价值是0

dav*_*vin 6

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

4 + 17 % 2 - 1
Run Code Online (Sandbox Code Playgroud)

相当于

4 + (17 % 2) - 1
Run Code Online (Sandbox Code Playgroud)

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

当您在其中放置括号时,您可以更改评估顺序:

(4+17) % 2 - 1
Run Code Online (Sandbox Code Playgroud)

相当于

21 % 2 - 1
Run Code Online (Sandbox Code Playgroud)

再次,因为%有更高的优先权-,收益率

1 - 1
Run Code Online (Sandbox Code Playgroud)

是的 0