混合运算符优先级的 Visual C++ 语句
Visual C++ statement with mixture of operators priority
我在使用 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!
我参考了这个link:https://msdn.microsoft.com/en-us/library/126fe14k.aspx
||
运算符的右侧未执行,因为左侧表达式 &&
运算符的计算结果为真。
所以只发生了y++
,剩下-2。
我不是专家,但这是我的观点:
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.
我在使用 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!
我参考了这个link:https://msdn.microsoft.com/en-us/library/126fe14k.aspx
||
运算符的右侧未执行,因为左侧表达式 &&
运算符的计算结果为真。
所以只发生了y++
,剩下-2。
我不是专家,但这是我的观点:
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.