C#实践教程(第2版)
上QQ阅读APP看书,第一时间看更新

2.7 运算符与表达式

C#中的运算符是对变量、常量或其他数据进行计算的符号,根据运算符的操作个数可以将它分为3类:一元运算符、二元运算符、三元运算符。

2.7.1 运算符分类

根据运算符所执行的操作类型主要将它分为以下几种:

□ 算术运算符;

□ 比较运算符;

□ 赋值运算符;

□ 逻辑运算符;

□ 条件运算符;

□ 递增、递减运算符;

□ new运算符;

□ as运算符。

1. 算术运算符与算术表达式

算术运算符就是进行算术运算的操作符,如“+”、“-”和“/”等。使用算术操作符将数值连接在一起,符合C#语法的表达式可以称为算术表达式。常见的算术运算符以及说明如表2-9所示。

表2-9 常见的算术运算符

2. 比较运算符与比较表达式

比较运算符通过比较两个对象的大小,返回一个真/假的布尔值,比较运算符又叫作关系运算符。使用比较运算符将数值连接在一起,符合C#语法的式子称为比较表达式。常见的比较运算符及说明如表2-10所示。

表2-10 常见的比较运算符

3. 逻辑运算符与逻辑表达式

&&、&、^、!、||以及|都被称为逻辑运算符或逻辑操作符,使用逻辑运算符把运算对象连接起来并且符合C#语法的式子称为逻辑表达式。常见的逻辑运算符及说明如表2-11所示。

表2-11 常见的比较运算符

逻辑运算结果是一个用真/假值来表示的布尔类型,当操作数不同时,逻辑运算符的运算结果也可以不同,如表2-12演示了操作运算的真假值结果。

表2-12 常见的逻辑运算符真值表

4. 赋值运算符与赋值表达式

赋值运算符用于变量、属性、事件或索引器元素赋新值,它可以把右边操作数的值赋予左边。C#中常见的赋值操作符包括=、+=、-=、/=、%=、*=、^=、&=、|=、<<=和>>=等,它们的具体说明如表2-13所示。

表2-13 常见的赋值运算符

表2-13已经列出了常见的赋值运算符,下面将对左移赋值、右移赋值和位与赋值进行介绍。

<<=(左移赋值运算符) 左移是将<<左边的数的各二进制位左移若干位,<<右边的数指定移动位数,高位丢弃,低位补0,移几位就相当于乘以2的几次方。

>>=(右移赋值运算符) 右移赋值运算符是用来将一个数的各二进制位右移若干位,移动的位数由右操作数指定(右操作数必须是非负值),移到右端的低位被舍弃,对于无符号数,高位补0。对于有符号数,某些机器将对左边空出的部分用符号位填补(即算术移位),而另一些机器则对左边空出的部分用0填补(即逻辑移位)。

&=(位与赋值运算符) 位与赋值运算符是指参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。这里的1可以理解为逻辑中的true,而0可以理解为逻辑中的false。

5. 条件运算符与条件表达式

条件运算符是指?:运算符,它也通常被称为三元运算符或三目运算符,使用条件运算符将运算对象连接起来并且符合C#语法的式子称为条件表达式。如下代码所示为条件运算符的一般语法:

b = (a>b) ? a : b;

上述语法中?和:都是关键符号,?前面通常是指一个比较表达式(即关系表达式),后面紧跟着两个变量a和b。?用来判断前面的表达式,如果表达式的结果为true则返回值为a,如果前面表达式的结果为false则返回值为b。

例如声明一个变量docname表示医生的名称,接着通过GetType()方法获取该变量的类型,并且通过IsValueType判断是否为值类型,如果是则返回“值类型”,否则返回“引用类型”。然后将返回的结果保存到变量country中,最后将结果在控制台输出。其具体代码如下所示:

string docname = "angel";
string country = docname.GetType().IsValueType ? "值类型" : "引用类型";
Console.WriteLine(country);

6. 其他特殊运算符

C#中包含多种运算符,除了上面介绍的运算符外,还包括其他的一些特殊运算符,表2-14对这些运算符进行了介绍。

表2-14 其他特殊运算符

2.7.2 运算符的优先级

当用户在表达式中包含多个运算符操作时,需要根据运算的优先级别进行计算。如表2-15中列出了C#运算符的优先级别与结合性。

表2-15 C#中运算符的优先级与结合性