增量后,增量前。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图表更详细、更好的运算符优先级图表-