
2.2 运算符和表达式
在实际生活和工作中,相信每个人都有计算的概念,从加、减、乘、除简单的计算到平方、乘方等复杂的计算,计算的直接手段就是数学表达式,而运算符是表达式的组成部分。本节将介绍运算符的相关内容和表达式的使用。
2.2.1 二元运算符
【本节示例参考:\源代码\C2\Example_3】
【本节示例参考:\源代码\C8\Example_4】
二元运算符就是需要两个操作数参与的运算符,如加减乘除四则运算的符号“+”、“-”、“*”、“/”就是二元运算符。表2.2列出了常用的二元运算符,其中var1、var2、var3既可以是数值,也可以是表达式。
表2.2 常用的二元运算符

从表2.2可以看出,C#中的二元运算符包括二元算术运算符、比较运算符、赋值运算符和逻辑运算符,这些运算符与C语言、Java语言中的用法基本相同。代码2.3演示了算术运算符的使用。
注意
赋值运算符“=”规定为等号右边的值赋给等号左边的变量,顺序不能改变。
代码2.3 二元算术运算符Program.cs
01 using System; 02 using System.Collections.Generic; 03 using System.Linq; 04 using System.Text; 05 namespace Example_3 06 { 07 class Program 08 { 09 static void Main(string[] args) 10 { 11 //定义两个变量用于计算 12 int a = 6; 13 int b = 3; 14 //输出运算结果 15 Console.WriteLine("a+b={0}",a+b); //输出a+b 16 Console.WriteLine("a-b={0}", a - b); //输出a-b 17 Console.WriteLine("a*b={0}", a * b); //输出a*b 18 Console.WriteLine("a/b={0}", a / b); //输出a/b 19 Console.WriteLine("a%b={0}", a % b); //输出a%b 20 Console.ReadKey(); 21 } 22 } 23 }
此段代码实现了两个整型变量a和b的四则运算,并将结果输出到控制台。程序运行结果如图2.3所示。

图2.3 代码2.3运行结果
说明
代码2.3的第15行Console.WriteLine(“a+b={0}”,a+b);是输出控制台的一种格式,{0}表示逗号后面第一位(索引为0)表达式的值,这种显示格式在后面会陆续接触。
逻辑运算符“&&”表示逻辑“与”操作,用来验证参与运算的两个表达式都为“真”,它的运算规则如表2.3所示。
表2.3 逻辑与“&&”运算规则

逻辑运算符“||”表示逻辑“或”操作,用来验证参与运算的两个表达式有真有假,它的运算规则如表2.4所示。
表2.4 逻辑或“||”运算规则

代码2.4演示了逻辑与、逻辑或的运算结果。
代码2.4 逻辑“与”、逻辑“或”的运算
01 using System; 02 using System.Collections.Generic; 03 using System.Linq; 04 using System.Text; 05 06 namespace Example_4 07 { 08 class Program 09 { 10 static void Main(string[] args) 11 { 12 //声明两个布尔型变量 13 bool flag = true; 14 bool myfalse=false; 15 //显示逻辑"与"运算结果 16 Console.WriteLine("true && false is{0}",flag&&myfalse);//输出true&&false 17 Console.WriteLine("true && true is{0}", flag && flag);//输出true&&true 18 Console.WriteLine("false && true is{0}",myfalse && flag);//输出false &&true 19 Console.WriteLine("false && false is{0}",myfalse && myfalse);//输出false &&false 20 //显示逻辑"或"运算结果 21 Console.WriteLine("true || false is{0}",flag || myfalse);//输出true || false 22 Console.WriteLine("true || true is{0}",flag || flag);//输出true || true 23 Console.WriteLine("false ||true is {0}",myfalse || flag);//输出false || true 24 Console.WriteLine("false || false is {0}",myfalse || myfalse);//输出false ||false 25 Console.ReadKey(); 26 } 27 } 28 }
代码2.4第13行和第14行声明了两个bool型变量,第16~19行进行了逻辑与运算并输出结果,第21~24行进行逻辑或运算,并输出结果。所有计算结果都遵循表2.3和表2.4中的运算规则。代码2.4运行结果如图2.4所示。

图2.4 代码2.4运行结果
2.2.2 一元运算符
【本节示例参考:\源代码\C2\Example_5】
一元运算符就是只有一个变量和一个运算符构成的表达式。常见的一元运算符包括自加运算符“++”、自减运算符“--”和逻辑非“!”。“++”可将操作数加1,“--”可将操作数减1,逻辑非是将表达式的值取反。自加、自减运算符在表达式前后的结果是不一样的。表2.5解释了前置和后置自加、自减运算符的运算结果。
表2.5 前置和后置自加、自减运算符

代码2.5演示了自加/自减运算。
代码2.5 自加、自减运算Program.cs
01 using System; 02 using System.Collections.Generic; 03 using System.Linq; 04 using System.Text; 05 namespace Example_5 06 { 07 class Program 08 { 09 static void Main(string[] args) 10 { 11 //定义两个变量 12 int a = 6; 13 int b = 8; 14 //显示输出结果 15 Console.WriteLine("a++等于{0}",a++); //后置自加 16 Console.WriteLine("++a等于{0}",++a); //前置自加 17 Console.WriteLine("b--等于{0}",b--); //后置自减 18 Console.WriteLine("--b等于{0}",--b); //前置自减 19 Console.ReadKey(); 20 } 21 } 22 }
读了上面的代码,您能够给出一个正确的答案吗?如果您的结果和图2.5的相同,恭喜您掌握了这部分内容。如果出错了,请看下面的解释。

图2.5 代码2.5运行结果
为什么代码16行++a输出的结果不是7,而是8呢?代码18行--b输出的结果不是7而是6呢?是不是代码出错了或者结果错了呢?
代码和结果都是正确的。在15行代码运行后a的值已经加1变成7,那么++a之后加1就输出8,同样17行代码b--运行后,b被赋值为7,--b运行后减1,输出为6。
2.2.3 三元运算符
根据前面的解释也可以理解三元运算符的含义,就是有3个操作数参与的运算,具体表达为:操作数1?操作数2:操作数3,操作数可以为变量或者表达式。输出结果为:如果操作数1为真,输出操作数2;如果操作数1为假,输出操作数3。三元运算符的输出结果取决于“?”前面的操作数。
例如,a=3>4?3:4; 输出结果为4。
a=3<4?3:4; 输出结果为3。
2.2.4 简化运算符的表达
从前面的介绍可以发现一元运算符自加、自减实际上是二元运算符的简化写法,例如,a++与a=a+1有相同的功能。在C#中还提供了其他简化写法,供大家参考。表2.6列出了C#中常用的简化运算符。
表2.6 简化运算符

2.2.5 运算符优先级
在小学数学中都学过这样一个规定:如果同一个算式中有加、减、乘、除运算,在没有括号的情况下先乘除后加减,有括号时先括号内运算再括号外,这就是一个典型的运算符优先级。C#中运算符优先级也遵循这样的规则。如果一个表达式中出现同一个优先级的运算符,这些运算符的运算顺序取决于其结合性。结合性指运算符在表达式中从左到右或从右到左的运算顺序。表2.7列出了运算符的优先级。
表2.7 运算符的优先级
