具有运算符优先级

时间:2018-06-10 16:45:25

标签: visual-c++ operators

我使用Visual Studio 2017遇到此问题:

int x = 2, y = -3;
cout << ((--x + y && y++ - x) || x-- + (--y + x++)) << endl;
cout << "x = " << x << ", y = " << y << endl << endl;

它总是显示整个语句的结果是1(可以),而x = 1和y = -2。

我不明白的是 y 如何等于 -2 ?在我的计算中,它应该是 -3

我参考了这个链接:https://msdn.microsoft.com/en-us/library/126fe14k.aspx

2 个答案:

答案 0 :(得分:0)

||运算符的右侧未执行,因为左侧表达式&&运算符的计算结果为true。

所以只发生y++,将其保留为-2。

答案 1 :(得分:0)

我不是专家,但这是我的观点:

cout << ((--x + y && y++ - x) || x-- + (--y + x++)) << endl;

((--x + y && y++ - x)解析为-4非零,因此为真。因此,不必检查x-- + (--y + x++)),也无需执行该代码。

在表达式(--x + y && y++ - x)中有一个--x因此会导致x和y ++的递减将导致y的增量,即。 Y = -3 + 1。