[音乐] 大家好,在对数据类型和变量有了一定了解之后,
我们这一讲来学习C#中的运算符和表达式。
运算就是数据的加工过程,表示不同 的运算的这种符号就是运算符。
那么, 运算的对象,或者说运算符操作的对象,我们也称为操作数。
表达式就是运算符和运算的对象 按照一定的规则组织在一起的式子。
不同类型的表达式,按照不同的运算规则进行计算, 计算的结果也是不同类型的值。
请大家学习这个 运算符和表达式的时候,有这么几点要注意。
首先, 要正确地书写运算符的符号。
因为在C# 中,有一些运算符的符号和我们普通数学公式中的符号 还是有比较大的区别的。
像这个整除、 取余这个符号,
以及我们的等号,因为在数学公式中,等号是一个等号, 而在C#中,要表示两个数相等,它是用两个等号来表示的。
第二要注意的就是运算符和运算对象的关系。
因为有一些运算符,它对运算的对象有一些要求。
像比如这个 比较运算符,它就不允许两边是字符串类型的变量。
第三,要注意运算符的优先级和它的结合方向。
如果运算对象两边的运算符不同,那么先要执行优先级高的那个运算。
如果运算对象两边的运算符的优先级是一样的,那么它的执行顺序就是从左至右。
如果你对这个运算符的优先级拿不准的话,那么可以通过使用圆括号
来确定,或者改变它的优先级顺序。
在C#中的运算符和表达式,总体上来讲有这样七种。
我们先来看一下数学运算符和表达式。
数学运算嘛,无非是加减乘除,在这里呢,多了一个 取余,这个实际上和一般的数学公式里边是一样的。
只不过它的运算符里头,除了加和减以外,其他 三种和普通数学公式中的这种符号有一些区别,
在这个算术运算里头,它的优先级和我们日常的数学运算 是一样的,就是先乘、 除,然后取余,最后是加、 减。
算术运算的对象可以是数值变量、 常量、 函数,也可以是表达式等等。
进行算术运算的时候,应该注意这样几个方面的问题。
对除法, 如果除数和被除数都为整型数,那么它们的结果也一定是整型数。
我们来看一个例,这里定义了两个变量,i和j,它们都是整型变量,
虽然x被定义成double类型的变量,但是这两个整型变量相除, 得到的结果x依然是一个整型。
那么,如果要想得到一个实型数, 那么被除数或者除数,就至少要有一个是实数。
还是刚才这个例,我们把j定义成了double类型,那么这个时候,x就会得到 一个double类型的数了。
在C#语言中,没有指数运算符。
所以,要想做这样,比如5X平方这样的运算,它必须写成5*X*X。
在C#中所有的运算符都不能省略。
比如说我们要做(x+y)*(x-y),这里中间的乘号是必须要写出来的。
对整除求余运算,它的运算符两侧必须为整型数,
它的运算结果是两个数相除之后的余数。
我们来看一个例子。
这段程序只定义了一个main方法, 这两行语句是从键盘输入数据,
并且将接收的字符型数据转换为double型实数。
再分别赋值给double型的变量,x和y。
我们已经学过,从键盘接收的任何数都是字符, 要获得数值本身,需要用到convert类中的方法。
convert类属于System名词空间,
所以在系统自动生成的第1到第5行代码中,第1行代码是绝对不能 缺少的。
第14行是将算术表达式结果赋值为变量z。
根据算术表达式的运算规则,要先计算圆括号中的内容, 在圆括号中,先计算乘法,再计算减法,
所以这里先求x*x,再计算4*x*y, 之后再计算它们的差,最后来做除2的运算。
最后一行语句,就是将x、 y和z的值,显示输出在屏幕上。
这就是程序最后的执行结果。
关系运算符又称为比较运算符, 用于比较两个运算数据的大小。
关系运算符的两侧, 可以是数据,也可以是表达式。
用关系运算符连接起来的表达式,可以是 算术表达式、
关系表达式、 逻辑表达式、 赋值表达式以及字符等等。
用关系运算符将两个表达式或者数据连接起来,就构成了关系表达式。
C#中的关系运算符有>、 <、 ==、 !=、 >=和<= 这几种。
这里要特别注意的是==和!=的符号,它们和一般数学公式中的符号完全不一样。
关系表达式的运算结果是布尔值。
比如,5==3,它的运算结果false。
而5>=0,它的运算结果是ture。
关系运算符的优先级顺序是 >,>=,<,<=要比
==和!=的优先级别高。
和算术运算符相比, 所有算术运算符的优先级都高于关系运算符。
比如计算3+5>7,它就先计算3+5,
然后再计算>7,所以这个表达式的运算结果 是ture。
请大家注意,关系运算符的两侧,不能是字符串类型的变量。
逻辑运算的结果是真和假。
C#中的逻辑运算符有逻辑非、 逻辑与和逻辑或这样三种。
比如,如果a和b同时为真的,a和b进行逻辑与的结果也是真。
在逻辑运算中,逻辑非的优先级是最高的,其次是逻辑与, 优先级最低的是逻辑或。
逻辑运算的对象, 可以是算术表达式、 关系表达式、 赋值表达式,也可以是逻辑表达式。
赋值运算符是一个 等号,它用于将等号左边表达式的值存入等号右边的变量中。
请大家注意,这里的等号和数学公式中的等号完全不一样。
在C#中要表示相等,必须用两个等号来表示。
例如这个表达式的意思就是,将表达式的值 e赋值给变量V。
赋值运算符还可以和算术运算符一起 构成复合赋值运算符,它们的格式是这样。
例如, a+=5,就完全等价于a=a+5。
除了这个+=之外,
复合赋值运算符还有-=、 *=等等10个。
请大家注意,赋值运算符的左侧,必须是变量。
自增和自减运算符,也是C#中常用的运算符。
它们都是单目运算符,也就是说运算的对象是一个变量。
这里的运算符++和--,可以放在变量的前边,也可以放在变量的后边。
但是放在前边和后边,对运算对象的值的影响是不一样的。
例如,我们定义三个变量,i、 n和m, 并且给i赋值5。
执行完这两行语句之后, 它的结果会是什么呢?首先n=i++是表示
首先将i赋值给n,然后i+1,所以它们的执行结果是这样。
那么如果继续执行这两行语句, m=++i,这个时候++在变量的前边,
那么就意味着,首先执行i++,也就说首先执行i+1,然后把+1的结果再赋给m。
所以这两行语句完了以后,它们的执行结果会是这种样子。
C#中还有位运算符,位运算符用来实现两个二进制数的按位操作。
一共有6个,我们举个例子来看一下。
比如定义了三个整型变量,x、 y和z,
并且给x赋值100,y赋值120,然后执行x和y的按位相与,
并且把它们的结果赋值给z。
那么, 那么执行的结果就是这个样子。
这个执行的过程, 如果我们用八位二进制数来描述的话
那么它们的执行过程是这样,这是x, 这是y,执行按位相与之后的结果是这样。
而这个结果 转换成十进制数,就是96。
C#中还提供了一种问号表达式,也称为条件表达式。
它使用问号和冒号两个运算符,对三个对象进行操作。
问号表达式的格式是这样:<表达式1>?<表达式2>:<表达式3>。
它的含义是这样, 如果表达式1的值为真的话,那么整个表达式的运算结果就是表达式2的值;
如果表达式1的值为假的话,那么整个表达式的运算结果就是 表达式3的值。
我们来看一个例,这个表达式的含义是
如果x>y为真,那么z就等于x;如果x>y为假, 那么z就等于y。
这个表达式的意义完全等价于 这个分支程序。
有关分支程序,我们后边马上就会讲到了。
分支程序的意义就是,当满足一定条件的时候,会执行某一段特定的程序语句。
所以我们也将问号表达式称为条件表达式。
C#的运算符有几十种,不同的运算符具有不同的优先级, 使用的时候必须遵循严格的运算符优先规则。
我们前面已经学到, 同一种类型的运算符中,不同的运算符可能有不同的优先级别。
事实上,在不同类型的运算符中, 它们也存在着一定的优先级差别。
不同类型运算符的优先级顺序是这样: !运算符要高于算术运算符,再高于关系运算符,
再高于其他逻辑运算符。
函数值计算 的优先级要高于单目运算,再高于双目运算。
从总体来讲,表达式的执行的基本顺序是从左至右。
而圆括号的优先级别是所有运算符中最高的。
所以,可以通过使用括号来改变或者明确混合运算中的运算顺序。
比如来看一下这个表达式,这里的isgreat(z)
是一个函数,这个表达式的计算顺序是这样:
先计算x*y,因为算术运算符的优先级 要高于比较运算符。
紧接着再计算x*y>z, 因为比较运算符的优先级高于逻辑与运算,
所以要先计算x*y<100。
因为逻辑与运算的优先级要高于逻辑或,所以第四步就 先执行逻辑与。
-x 是一个单目运算符,单目运算符的优先级别都高于双目运算符,
所以第五步先计算-x,第六步再计算-x*y,以此类推。
最后,计算完整个表达式。
这是C#中的主要运算符,它们的优先级从上至下。
数字越小,优先级别越高。
我们后面的 程序设计中,可能会用到一些数学公式或者些计算
比如像开平方,计算一些像sin啊、 cos这样的三角函数值等等。
当然你自己完全可以自己编代码来完成这样的计算。
但是实际上没有必要,因为C#语言里头,已经包含了很丰富
的,各种数学函数,你完全可以直接拿来引用就好了。
C#中的数学函数大多是属于Math类的静态方法,
而Math类呢,它属于System命名空间,所以你前面只需要用 Using将System引用、 包含就可以。
比如下面我们的这一行语句,就是double z=Math.Sqrt(4),
它就是将4的开平方的值返回,所以它的执行结果 就是z=2.0。
额,有关这个Math的各种静态方法,因为
比较多,所以在这里呢,PPT上没办法列出来,我们专门弄了一张表,放在我们这一
周课程的阅读材料里头,如果你需要的话,可以自己打开来看。
好,下面我们把表达式这部分内容再总结性地回顾一下。
所谓表达式,就是用运算符将运算对象连接在一起, 具有合法语义的一个式子。
它由变量、 常量、 运算符 还有什么圆括号等等这些,按照一定的规则来组织在一起。
表达式通过运算以后会有一个结果,运算结果的类型由数据和运算符来共同决定。
大家学习表达式的时候,要注意这样几个问题。
一个首先是,表达式中运算符的 符号,和我们经常用到的数学公式中的一些符号
是不一样的,有些甚至有比较大的区别,或者说完全不同。
再一个,在C#里头,运算符是不能够省略的。
比如乘法,它必须要把这个乘号要写出来,而不能够减掉。
括号是必须用圆括号,而且要成对出现。
表达式在书写的时候,从左至右,在同一个基准上书写,没有高低之分。
好,这一讲我们就到这里。