Java算术表达式

Ros*_*ily 3 java operators

以下表达式的计算结果为14。

    int a=4;
    int b=6;
    int c=1;
    int ans= ++c + b % a - (c - b * c);
    System.out.print(ans);
Run Code Online (Sandbox Code Playgroud)

这就是我的计算方式

    1. (c - b * c) // since bracket has highest preference
    ans : -5
    2. ++c //since unary operator has next highest preference
    ans : 2
    3. b%a // % has higher preference than + and -
    ans : 2
Run Code Online (Sandbox Code Playgroud)

因此,2 + 2-(-5)= 9

如您所见,我得到的值是9。不知道我的计算方式出了什么问题(很确定我最终会看起来很愚蠢)

编辑:我指的是以下链接的优先级和关联。 https://introcs.cs.princeton.edu/java/11precedence/

有人可以解释16级和13级括号之间的区别吗?我认为13级括号仅用于类型转换。这就是为什么我考虑使用16级括号来评估表达式。

And*_*ner 6

评估顺序与优先级不同。Java 总是从左到右求值(在数组访问方面有一点警告)。

实际上,您正在评估以下表达式,因为发生的第一件事就是预递增c

2 + 6 % 4 - (2 - 6 * 2)
Run Code Online (Sandbox Code Playgroud)

然后,优先级描述如何组合值。