Skip to content
On this page

运算符优先级

前面我们学习了那么多运算符,如果编程中同时使用了多个运算符,到底哪一个会先运算呢?这就是优先级的问题。C#运算符的优先级请参考下面的顺序:

  1. 括号。学数学的时候我们就知道,要先计算括号里面的内容。C# 语言也是一样,如果有多层括号,要从里向外计算。括号优先级最高。
  2. 一元运算符。有些运算符两边有 2 个操作数,比如 2 + 36 % 5 等等,这些叫做二元运算符。只有一个操作数的叫做一元运算符,它们的优先级高于二元运算符。一元运算符包括:++(自加) 、 --(自减) 、 !(逻辑非)
  3. *(乘)、/(除)、%(取余)
  4. +(加)、-(减)
  5. >(大于)、<(小于)、>=(大于等于)、<=(小于等于)
  6. ==(等于)、!=(不等于)
  7. &&(逻辑与)
  8. ||(逻辑或)
  9. 赋值运算符。包括:=+=-=*=/=%=

注意

优先级相同的运算符从左向右计算(赋值运算符相反)。

csharp
bool b = 20 - (15 - 8) * 2 > 10 && (2 % 2 * 2 + 2) > 2;
Console.WriteLine(b);

分析:

  • 首先计算优先级最高的括号,(15-8) 得到 7,(2 % 2 * 2 + 2) 则需要先计算 %*,后算 +,结果是 2,表达式就变成了:bool b = 20 - 7 * 2 > 10 && 2 > 2;
  • 接下来优先级最高的是 7 * 2,然后是减法,变成:bool b = 6 > 10 && 2 > 2;
  • 继续计算两个大于号,得到:bool b = false && false;
  • 最后的结果当然是 false:
csharp
using System;
using System.Collections.Generic;
using System.Text;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            int x = 1; 
            bool a = ++ x * x > 3;
            bool b = true; // 请赋值,让这个程序输出 True
            Console.WriteLine(a == b);
        }
    }
}