运算符优先级
前面我们学习了那么多运算符,如果编程中同时使用了多个运算符,到底哪一个会先运算呢?这就是优先级的问题。C#运算符的优先级请参考下面的顺序:
- 括号。学数学的时候我们就知道,要先计算括号里面的内容。C# 语言也是一样,如果有多层括号,要从里向外计算。括号优先级最高。
- 一元运算符。有些运算符两边有 2 个操作数,比如
2 + 3、6 % 5等等,这些叫做二元运算符。只有一个操作数的叫做一元运算符,它们的优先级高于二元运算符。一元运算符包括:++(自加) 、--(自减) 、!(逻辑非)。 *(乘)、/(除)、%(取余)。+(加)、-(减)。>(大于)、<(小于)、>=(大于等于)、<=(小于等于)。==(等于)、!=(不等于)。&&(逻辑与)。||(逻辑或)。- 赋值运算符。包括:
=、+=、-=、*=、/=、%=。
注意
优先级相同的运算符从左向右计算(赋值运算符相反)。
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);
}
}
}