可能不正确的操作符优先级

本文关键字:操作符 优先级 不正确 | 更新日期: 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

y

y = y++ + y;

y = 10++ + 11;

还是从左到右,递增运算符post将y从10递增到11,因此最右边的y变为11,从而得到(10 + 11)= 21

计算y++ + y时,y++优先于y。所以左边的值是10,右边的值是11因为之前的增量。当计算x + x++时,xx++之前计算。因此,两边都将被求值为10,然后x将被求值为11,然后=操作数将x求值为20。

我认为+运算符比++具有更高的优先级,因此+运算符首先求值,但是为了求值它-它必须求它的左操作符和右操作符。

在第二个例子中,首先计算左操作符,因此y在计算右操作符之前递增。


在求值的优先级和顺序文档中,你可以看到++=之上,这基本上就是+++的上方是前缀 ++,不要与后缀 ++混淆。