1
namespace Randomedits
{
    class Program
    {
        static void Main(string[] args)
        {
            int x = 2;
            int sml2 = ++x - (x++) ;
            Console.WriteLine(sml2);
            Console.WriteLine(x);
        }
    }
}

输出:

0
4
4

1 回答 1

0

来自运营商

表达式中的操作数从左到右计算。例如,在 中F(i) + G(i++) * H(i)F使用 的旧值调用i方法,然后使用 的旧值G调用方法i,最后H使用 的新值调用方法i。这与运算符优先级分开且无关。

将此应用于您的表达式++x - x++,我们可以看到首先++x评估,然后x++评估,然后评估减法。

考虑运算符优先级的一个好方法是,具有较高优先级的运算符比具有较低优先级的运算符绑定得更紧密。它用于确定应将字符序列解析为哪些表达式,而不是评估事物的顺序。

比如在表达式++ x - x ++中,操作符++x比操作符绑定得更紧-,而操作符比操作x++符绑定得更紧-,所以 this 被解析为(++x) - (x++)。如果-运算符的优先级高于++xorx++运算符,则该表达式将被解析为++(x - x)++(这没有多大意义)。

++x具有更高优先级的事实x++在这里无关紧要。表达式确实很重要,它++x++被解析为(++x)++而不是++(x++)(并引发编译器错误,因为运算符x++不能应用于表达式(++x))。

一旦您使用运算符优先级规则确定++ x - x ++应该将其解析为(++x) - (x++),则应用上面引用的规则,并且-表达式的操作数从左到右进行计算。

于 2020-04-14T11:06:54.520 回答