C# - 运算符优先级
运算符优先级决定了表达式中项的分组。这会影响表达式的求值。某些运算符的优先级高于其他运算符;例如,乘法运算符的优先级高于加法运算符。
例如 x = 7 + 3 * 2;此处,x 被赋值为 13,而不是 20,因为运算符 * 的优先级高于 +,因此首先对 3*2 进行求值,然后再将 7 加到其中。
C# 运算符优先级表
此处,优先级最高的运算符显示在表的顶部,优先级最低的运算符显示在表的底部。在表达式中,优先级较高的运算符会先求值。
类别 | 运算符 | 结合性 |
---|---|---|
后缀 | () [] -> . ++ - - | 从左到右 |
一元运算符 | + - ! ~ ++ - - (type)* & sizeof | 从右到左 |
乘法 | * / % | 从左到右 |
加法 | + - | 从左到右 |
移位 | << >> | 从左到右 |
关系 | < <= > >= | 从左到右 |
相等 | == != | 从左到右 |
按位与 | & | 从左到右 |
按位异或 | ^ | 从左到右 |
按位或 | | | 从左到右 |
逻辑与 | && | 从左到右 |
逻辑或 | || | 从左到右 |
条件 | ?: | 从右到左 |
赋值 | = += -= *= /= %=>>= <<= &= ^= |= | 从右到左 |
逗号 | , | 从左到右 |
C# 运算符优先级
下表列出了 C# 运算符的优先级:
优先级 | 运算符 | 结合性 |
---|---|---|
最高 (1) | () [] . | 从左到右 |
2 | ++ -- (后缀) | 从左到右 |
3 | ++ -- + - (前缀)! ~ | 从右到左 |
4 | * / % | 从左到右 |
5 | + - | 从左到右 |
6 | << >> | 从左到右 |
7 | < <= > >= | 从左到右 |
8 | == != | 从左到右 |
9 | & | 从左到右 |
10 | ^ | 从左到右 |
11 | | | 从左到右 |
12 | && | 从左到右 |
13 | || | 从左到右 |
14 | ?: (三元) | 从右到左 |
15 | = += -= *= /= %= &= ^= <<= >>= | 从右到左 |
最低 (16) | , (逗号运算符) | 从左到右 |
运算符示例优先级
此示例演示了表达式(包含多个运算符)如何根据运算符优先级对运算符进行求值:
using System; namespace OperatorsAppl { class Program { static void Main(string[] args) { int a = 20; int b = 10; int c = 15; int d = 5; int e; e = (a + b) * c / d; // ( 30 * 15 ) / 5 Console.WriteLine("Value of (a + b) * c / d is : {0}", e); e = ((a + b) * c) / d; // (30 * 15 ) / 5 Console.WriteLine("Value of ((a + b) * c) / d is : {0}", e); e = (a + b) * (c / d); // (30) * (15/5) {0}", e); e = a + (b * c) / d; // 20 + (150/5) {0}", e); Console.ReadLine(); } } }
当编译并执行上述代码时,它会产生以下结果 -
Value of (a + b) * c / d is : 90 Value of ((a + b) * c) / d is : 90
更多 C# 运算符优先级示例
示例 1:先乘后加
在此示例中,乘法的优先级高于加法。
using System; class Program { static void Main() { int result = 10 + 5 * 2; Console.WriteLine("Result: " + result); } }
当编译并执行上述代码时,它会产生以下结果 -
Result: 20
示例 2:使用括号改变优先级
在此示例中,括号改变了运算的优先级。
using System; class Program { static void Main() { int result = (10 + 5) * 2; Console.WriteLine("Result: " + result); } }
当编译并执行上述代码时,它会产生以下结果 -
Result: 30
示例 3:组合逻辑运算符和关系运算符
在此示例中,关系运算符在逻辑"与"运算之前执行。
using System; class Program { static void Main() { bool result = 5 > 3 && 10当编译并执行上述代码时,它会产生以下结果 -
Result: TrueC# 运算符结合性
当表达式中包含多个优先级相同的运算符时,运算符会结合性地确定执行顺序。
运算符结合性表
结合性 执行顺序 示例 从左到右 左操作数优先 a - b + c (a - b) + c 从右到左 右操作数优先 a = b = c a = (b = c) 运算符结合律示例
在此示例中,赋值运算符从右到左执行。
using System; class Program { static void Main() { int a, b, c; a = b = c = 10; // Right to left assignment Console.WriteLine("a: " + a + ", b: " + b + ", c: " + c); } }当编译并执行上述代码时,它会产生以下结果 -
a: 10, b: 10, c: 10常见问题解答 (FAQ)
问题 1:C# 中哪个运算符的优先级最高?
括号
()
、数组索引[]
和点运算符.
等运算符的优先级最高。问题 2:当两个运算符的优先级相同时会发生什么?
如果两个运算符的优先级相同,则结合性规则将决定它们的顺序。例如,
*
和/
的求值顺序是从左到右的。问题 3:如何避免运算符优先级混淆?
避免错误的最佳方法是使用括号
()
来明确执行顺序。