Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
增量后,增量前。JAVA_Java_Math_Increment_Post Increment - Fatal编程技术网

增量后,增量前。JAVA

增量后,增量前。JAVA,java,math,increment,post-increment,Java,Math,Increment,Post Increment,我理解增量后操作和增量前操作之间的区别。 但问题是:我有一个表达: int x = 4; long y = x * 4 - x++; 最高优先级有后一元运算符,而不是*和last-。我认为这将是: long y = x * 4 - x++; 1). x++ => return 4 (save x = 5) 2). final expression: 5 * 4 - 4 = 16 但当我在IDE中编译时,答案是12!什么是问题?我在哪里做了smth。错了吗 long y = 4 * 4

我理解增量后操作和增量前操作之间的区别。 但问题是:我有一个表达:

int x = 4;
long y = x * 4 - x++;
最高优先级有后一元运算符,而不是*和last-。我认为这将是:

long y = x * 4 - x++;

1). x++ => return 4 (save x = 5)
2). final expression: 5 * 4 - 4 = 16
但当我在IDE中编译时,答案是12!什么是问题?我在哪里做了smth。错了吗

long y = 4 * 4 - 4;
x将在此赋值后递增

每次使用x++调用x时,它都会在 例如

x将在此赋值后递增

每次使用x++调用x时,它都会在 例如


x计算为4,x++也计算为4,然后递增为5。
所以它本质上是4*4-4,这等于预期的12。

x计算为4,x++也计算为4,然后增加到5。 所以它本质上是4*4-4,这等于预期的12

以下是计算表达式的步骤:

int x = 4;
long y = x * 4 - x++;
计算从左到右递增/递减的所有表达式 将所有变量替换为其真实值 使用规则计算表达式 例如:

int x = 4;   
int y = ++x * 5 / x-- + --x;  
首先,我们需要在从左到右计算表达式替换之前替换x的所有值 ++x->因为这是一个后增量,我们将在替换之前先增量x,因此x将是5 5*5/x-+-x->这将是新的方程式 现在我们用x代替x- 由于它是一个后减量x,这里将用5代替,在替代减量x之后,因此x将是4 5*5/5+-x->这将是新的方程式 现在我们将在-x中替换x -x->因为它是一个预减量,我们将首先减量x,因此x将是3 5*5/5+3//这将是新的方程式

由于方程中没有变量,我们现在将使用PEMDAS计算表达式 25 / 5 + 3 5 + 3 8. 因此,结果将是8

编辑

以下是计算表达式的步骤:

int x = 4;
long y = x * 4 - x++;
计算从左到右递增/递减的所有表达式 将所有变量替换为其真实值 使用规则计算表达式 例如:

int x = 4;   
int y = ++x * 5 / x-- + --x;  
首先,我们需要在从左到右计算表达式替换之前替换x的所有值 ++x->因为这是一个后增量,我们将在替换之前先增量x,因此x将是5 5*5/x-+-x->这将是新的方程式 现在我们用x代替x- 由于它是一个后减量x,这里将用5代替,在替代减量x之后,因此x将是4 5*5/5+-x->这将是新的方程式 现在我们将在-x中替换x -x->因为它是一个预减量,我们将首先减量x,因此x将是3 5*5/5+3//这将是新的方程式

由于方程中没有变量,我们现在将使用PEMDAS计算表达式 25 / 5 + 3 5 + 3 8. 因此,结果将是8


乘法是单独解析的,因此x==4。递增是在之后发生的,所以实际上是4*4-4==12,在这个运算之后x==5。

乘法是单独解析的,所以x==4。递增发生在之后,因此它实际上是4*4-4==12,在这个运算之后x==5。

减法的左侧总是在右侧之前计算,因为减法是左关联的,即5-2-1是5-2-1,而不是5-2-1


这就是为什么乘法发生在增量之前。关联性决定首先发生什么,而不是优先级。

减法的左侧总是在右侧之前计算,因为减法是左关联的,即5-2-1是5-2-1,而不是5-2-1


这就是为什么乘法发生在增量之前。关联性决定首先发生什么,而不是优先级。

x*4首先计算,即16。然后计算x++的值,它首先得到x,然后增加x。在得到它的时候是4。所以16-4=12。如果将其更改为++x,那么答案将是11。可能重复的“否”是不同的。+和*的优先级差别很大我不明白为什么*是第一位??expr++具有hights优先级!!看看这个例子:inty=++x*5/x-+-x;如果首先计算x=3x*4,则结果为7,即16。然后计算x++的值,它首先得到x,然后增加x。在得到它的时候是4。所以16-4=12。如果将其更改为++x,那么答案将是11。可能重复的“否”是不同的。+和*的优先级差别很大我不明白为什么*是第一位??expr++具有hights优先级!!看看这个例子:inty=++x*5/x-+-x;如果x=3,结果将是7,但为什么要输入这些信息?这是基础数学。这不是Java唯一的东西。好的,基础数学。但是为什么长y=-x+++x*4的结果;是13岁吗?用你的话说,乘法必须是第一个!但是没有,x++第一个长y=-x+++x*4;将是16岁。我的
解释不正确。MDAS仅适用于没有增量/减量的情况。我已经更新了我的解释。@Mark-我认为这是一个比OP-OK给出的oracle图表更详细、更好的运算符优先级图表,但为什么要在中包含此信息?这是基本数学。这不是Java唯一的东西。好的,基础数学。但是为什么长y=-x+++x*4的结果;是13岁吗?用你的话说,乘法必须是第一个!但是没有,x++第一个长y=-x+++x*4;将是16岁。我的解释不正确。MDAS仅适用于没有增量/减量的情况。我已经更新了我的解释。@Mark-我认为这是一个比OP给出的oracle图表更详细、更好的运算符优先级图表-