零基础学C# 3.0
上QQ阅读APP看书,第一时间看更新

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 运算符的优先级