可能不正确的操作符优先级
本文关键字:操作符 优先级 不正确 | 更新日期: 2023-09-27 18:11:17
考虑以下伪代码:
int x = 10;
int y = 10;
x = x + x++;
y = y++ + y;
print(x); // 20
print(y); // 21
类C语言,如c#或Java,表示自增运算符的优先级高于+
运算符。所以两种情况下都应该是21
为什么打印两个不同的结果?
记住我们是从左到右的。
让我们先处理x,然后处理y。
x
x = x+ x++;
我们从左到右…
x = 10+ (10++)
注意:从左到右,对最右边的x进行后增量操作,对RHS上最先出现的x没有影响。
x = 20
yy = y++ + y;
y = 10++ + 11;
还是从左到右,递增运算符post将y从10递增到11,因此最右边的y变为11,从而得到(10 + 11)= 21
计算y++ + y
时,y++
优先于y
。所以左边的值是10,右边的值是11因为之前的增量。当计算x + x++
时,x
在x++
之前计算。因此,两边都将被求值为10,然后x
将被求值为11,然后=
操作数将x
求值为20。
我认为+
运算符比++
具有更高的优先级,因此+
运算符首先求值,但是为了求值它-它必须求它的左操作符和右操作符。
在第二个例子中,首先计算左操作符,因此y
在计算右操作符之前递增。
在求值的优先级和顺序文档中,你可以看到+
在+=
之上,这基本上就是++
。+
的上方是前缀 ++
,不要与后缀 ++
混淆。