Java 使用前缀增量运算符和括号优先级澄清数学表达式

Java 使用前缀增量运算符和括号优先级澄清数学表达式,java,math,operator-precedence,associativity,Java,Math,Operator Precedence,Associativity,鉴于此代码: 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) 正如您正确指出的,大括号具有优先权。但是,您的程序仍然“从左到右”运行。因此首先计算左侧,即k=8。然后计算右侧,即(++k-8

鉴于此代码:

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)
正如您正确指出的,大括号具有优先权。但是,您的程序仍然“从左到右”运行。因此首先计算左侧,即
k=8
。然后计算右侧,即
(++k-8)=1

现在我们已经确定了两边,可以将它们相乘:
8*1=8

你有一个与

left side:  k  
right side: (++k-8)
正如您正确指出的,大括号具有优先权。但是,您的程序仍然“从左到右”运行。因此首先计算左侧,即
k=8
。然后计算右侧,即
(++k-8)=1

现在我们已经确定了两边,可以将它们相乘:
8*1=8

这是您的代码编译的类文件:

   int k = 8;
    byte var10000 = k;
    int k = k + 1;
    int p = var10000 * (k - 8);
    System.out.println(p); 

这是您的代码编译的类文件:

   int k = 8;
    byte var10000 = k;
    int k = k + 1;
    int p = var10000 * (k - 8);
    System.out.println(p); 

在我的IDE中,它会在程序的末尾
p=8
k=9
打印8@您正在使用哪个IDE?优先级与求值顺序不同。优先级指定如何组合这些计算。“这”是什么?一个正确的Java编译器应该在这里生成8。您已经声明您同时获得8和9。是哪一个?不清楚您在问什么。在我的IDE中,它可能重复打印8,在程序的末尾
p=8
k=9
@您正在使用哪个IDE?优先级与求值顺序不同。优先级指定如何组合这些计算。“这”是什么?一个正确的Java编译器应该在这里生成8。您已经声明您同时获得8和9。是哪一个?不清楚你在问什么。可能是重复的我同意,但他的输出是“9”。@aomerk不。问题是,为什么不是9?我真的认为他的ide搞砸了,我同意,但他的输出是“9”。@aomerk不。问题是,为什么不是9?我真的认为他的ide搞砸了