【问题标题】:Postfix has high precedence than prefix so value of sml2 in given code should be 2 but it's 0. Why?后缀的优先级高于前缀,因此给定代码中 sml2 的值应该是 2 但它是 0。为什么?
【发布时间】:2020-07-27 01:57:13
【问题描述】:
namespace Randomedits
{
    class Program
    {
        static void Main(string[] args)
        {
            int x = 2;
            int sml2 = ++x - (x++) ;
            Console.WriteLine(sml2);
            Console.WriteLine(x);
        }
    }
}

输出:

0
4

【问题讨论】:

    标签: c# visual-studio-2019 operator-precedence postfix-operator prefix-operator


    【解决方案1】:

    来自Operators

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

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

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

    例如,在表达式++ x - x ++ 中,运算符++x- 运算符绑定得更紧密,x++ 运算符比- 运算符绑定得更紧密,所以解析为@ 987654337@。如果- 运算符的优先级高于++xx++ 运算符,则此表达式将被解析为++(x - x)++(这没有多大意义)。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      相关资源
      最近更新 更多