澄清使用前缀增量运算符和括号优先级的数学表达式
Clarification on math expression using prefix increment operator and bracket precedence
鉴于此代码:
int p,k=8;
p=k*(++k-8);
System.out.println(p);
当 ++k
被评估时 k=9
然后变成 k*(9-8)
给出 9*1
int p,k=8;
p=(++k-8)*k;
System.out.println(p);
但这给出了 9 作为输出
你有一个乘法
left side: k
right side: (++k-8)
如您正确所述,大括号优先。但是,您的程序仍然运行 "from left to right"。所以首先评估左侧,即 k = 8
。然后评估右侧,即 (++k-8) = 1
。
现在我们确定了两边,可以将它们相乘:8*1 = 8
.
这是您的代码编译后的 class 文件:
int k = 8;
byte var10000 = k;
int k = k + 1;
int p = var10000 * (k - 8);
System.out.println(p);
鉴于此代码:
int p,k=8;
p=k*(++k-8);
System.out.println(p);
当 ++k
被评估时 k=9
然后变成 k*(9-8)
给出 9*1
int p,k=8;
p=(++k-8)*k;
System.out.println(p);
但这给出了 9 作为输出
你有一个乘法
left side: k
right side: (++k-8)
如您正确所述,大括号优先。但是,您的程序仍然运行 "from left to right"。所以首先评估左侧,即 k = 8
。然后评估右侧,即 (++k-8) = 1
。
现在我们确定了两边,可以将它们相乘:8*1 = 8
.
这是您的代码编译后的 class 文件:
int k = 8;
byte var10000 = k;
int k = k + 1;
int p = var10000 * (k - 8);
System.out.println(p);