C#运算符优先级

 更新时间:2022-12-27   作者:  

通过前面的学习我们知道运算符有不同的类型,当这些不同类型的运算符出现在同一个表达式中时,就必须遵循运算符的优先级来进行运算,才能保证运算的合理性和结果的正确性、唯一性。运算符的优先级决定了表达式中各个部分执行运算的先后顺序。

下表中详细介绍了 C# 中运算符的优先级顺序:

优先级运算符名称或含义使用形式结合方向说明
1[]数组下标数组名[整型表达式]左到右
()圆括号(表达式)/函数名(形参表)
.成员选择(对象)对象.成员名
->成员选择(指针)对象指针->成员名
2-负号运算符-表达式右到左单目运算符
(type)强制类型转换(数据类型)表达式
++自增运算符++变量名/变量名++单目运算符
--自减运算符--变量名/变量名--单目运算符
*取值运算符*指针表达式单目运算符
&取地址运算符&左值表达式单目运算符
!逻辑非运算符!表达式单目运算符
~按位取反运算符~表达式单目运算符
sizeof长度运算符sizeof表达式/sizeof(类型)
3/表达式/表达式左到右双目运算符
*表达式*表达式双目运算符
%余数(取模)整型表达式%整型表达式双目运算符
4+表达式+表达式左到右双目运算符
-表达式-表达式双目运算符
5<<左移表达式<<表达式左到右双目运算符
>>右移表达式>>表达式双目运算符
6>大于表达式>表达式左到右双目运算符
>=大于等于表达式>=表达式双目运算符
<小于表达式<表达式双目运算符
<=小于等于表达式<=表达式双目运算符
7==等于表达式==表达式左到右双目运算符
!=不等于表达式!=表达式双目运算符
8&按位与整型表达式&整型表达式左到右双目运算符
9^按位异或整型表达式^整型表达式左到右双目运算符
10|按位或整型表达式|整型表达式左到右双目运算符
11&&逻辑与表达式&&表达式左到右双目运算符
12||逻辑或表达式||表达式左到右双目运算符
13?:条件运算符表达式1?表达式2:表达式3右到左三目运算符
14=赋值运算符变量=表达式右到左
/=除后赋值变量/=表达式
*=乘后赋值变量*=表达式
%=取模后赋值变量%=表达式
+=加后赋值变量+=表达式
-=减后赋值变量-=表达式
<<=左移后赋值变量<<=表达式
>>=右移后赋值变量>>=表达式
&=按位与后赋值变量&=表达式
^=按位异或后赋值变量^=表达式
|=按位或后赋值变量|=表达式
15,逗号运算符表达式,表达式,…左到右从左向右顺序运算


【示例】下面通过一个示例来演示一下运算符的优先级。

using System;

namespace c.biancheng.net
{
    class Demo
    {
        static void Main(string[] args){
            int a = 12;
            int b = 34;
            int c = 56;
            int d = 7;
            int e;

            e = (a + b) * c / d;
            Console.WriteLine("(a + b) * c / d 的值是 {0}", e);
            e = ((a + b) * c) / d;
            Console.WriteLine("((a + b) * c) / d 的值是 {0}", e);
            e = (a + b) * (c / d);
            Console.WriteLine("(a + b) * (c / d) 的值是 {0}", e);
            e = a + (b * c) / d;
            Console.WriteLine("a + (b * c) / d 的值是 {0}", e);
            Console.ReadLine();
        }
    }
}

运行结果如下:

(a + b) * c / d 的值是 368
((a + b) * c) / d 的值是 368
(a + b) * (c / d) 的值是 368
a + (b * c) / d 的值是 284