第4讲运算符和表达式

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第4讲运算符和表达式

教学目标:

(1)熟练使用各种运算符

(2)熟练使用各类表达式

(3)掌握各类运算符的优先级

一、运算符与表达式概述

1.运算符和表达式的概念

C#中各种运算是用符号来表示的,用来表示运算的符号称运算符。用运算符把运算对象连接起来的有意义的式子称为表达式,每个表达式的运算结果是一个值。

2.运算对象和运算符的“目”

运算符必须有运算对象,根据运算对象的多少可以把运算符分成单目运算符、双目运算符和三目运算符。

3.运算符的优先级和结合性

计算下面的表达式:

3+5*2

大家都知道先算“*”号再算“+”号,其实这里就涉及到运算符的优先级问题。即当表达式中出现多个运算符,计算表达式值时,必须决定运算符的运算次序,我们把这个问题称为运算符的优先级。

有如下的表达式:

Sb*(a-c)

该表达式应先算括号内的“a-c”,然后再用b乘上“a-c”的运算结果。

当在一个表达式中出现多个同级别的运算符时,应先算谁呢?这就涉及到运算符的结合性。

二、算术运算符

1.基本算术运算符

+ - * / %

说明:

1)/。如果除数和被除数都为整数,则结果为整数,把小数舍去(并非四舍五入);

2)%。在C#中,所有数值类型都具有预定义的模运算。如:

5%2为1,-5%2为-1,5.0%2.2为0.6,5.0m%2.2m为0.6

2.递增(++)、递减(--)运算符

其作用是使变量的值自动增加1或者减少1。

自增和自减运算符既可以在操作数前面(前缀),也可以在操作数后在(后缀)。即:++i、--i、i++、i--。

需要注意的是:递增和递减运算符只能用于变量,而不能用于常量或表达式,6++或(a+b)++都是不合法的。

int a = 3;

Console.WriteLine(-a++);

Console.WriteLine(-a--);

Console.WriteLine(-++a);

int a = 3;

int b = a++ + a++ + a++;

Console.WriteLine(a);

Console.WriteLine(b);

int a = 3;

int b = (++a) +(++a)+(++a);

Console.WriteLine(a);

Console.WriteLine(b);

三、赋值运算符

赋值运算符用于将一个数据赋予一个变量,赋值操作符的左操作数必须是一个变量,赋值结果是将一个新的数值存放在变量所指示的内存空间中。

其中“=”是简单的赋值运算符,它的作用是将右边的数据赋值给左边的变量,数据可

复合赋值运算符的运算非常简单,例如x*=5就等价于x=x*5,它相当于对变量进行一次自乘操作。复合赋值运算符的结合方向为自右向左。同样,也可以把表达式的值通过复合赋值运算符赋予变量,这时复合赋值运算右边的表达式是作为一个整体参加运算的,相当于表达式有括号。

例如,a%=b*2-5相当于a%=(b*2-5),它与a=a%(b*2-5)是等价的。

C#语言可以对变量进行连续赋值,这时赋值操作符是右关联的,这意味着从右向左运算符被分组。如x=y=z等价于x=(y=z)。

四、关系运算符

关系运算符用于在程序中比较两个值的大小,关系运算的结果类型是布尔型,也就说,结果不是true就是false。

一个关系运算符两种的运算对象如果是数值类型的对象,则比较的是两个数的大小;如果是字符型对象,则比较的是两个字符的Unicode编码的大小,比如:字符x的Unicode编码小于y,则关系表达式‘x’<‘y’的结果为true。

关系运算可以同算术运算混合,这时候,关系运算符两边的运算对象可以是算术表达式的值,C#先求表达式的值,然后将这些值做关系运算。比如:

五、逻辑运算符

逻辑运算符用于表示两个布尔值之间的逻辑关系,逻辑运算结果是布尔类型。

逻辑非运算的结果是原先的运算结果的逆,即:如果原先运算结果为false,则经过逻辑非运算后,结果为true;原先为true则,结果为false。

逻辑与运算含义是,只有两个运算对象都为true,结果才为true;只要其中有一个是false,结果就为false。

逻辑或运算含义是,只要两个运算对象中有一个是true,结果就为true,只有两个条件

bool b = (a == 4) && (a++ < 2);

Console.WriteLine(a);

int a = 3;

bool b = (a == 3) || (a++ < 2);

Console.WriteLine(a);

六、条件运算符

条件运算符由“?”和“:”组成,条件运算符是一个三元运算符。条件运算符的一般格式为:

操作数1?操作数2:操作数3

其中操作数1的值必须为布尔值。进行条件运算时,首先判断问号前面的布尔值是true 还是false,如果是true,则条件运算表达式的值等于操作数2的值;如果为false,则条件表达式的值等于操作数3的值。

七、其他运算符

1.字符串连接符(+)

字符串连接是最常用的字符串运算。所谓字符串的连接,就是将两个字符串连接在一起,形成新的字符串。C#提供了字符串连接运算符“+”,用于连接两个字符串。比如:“abc”+“efg”结果是abcefg

“36812”+“3.14”结果是368123.14

string str1 = 'a' + "bcdef";

Console.WriteLine(str1);

2.is运算符

is运算符用于检查表达式是否指定的类型,如果是,结果为true,否则结果为false。

例如:

int k = 2;

bool isTest = k is int; //isTest=true

Console.WriteLine(isTest);

3.sizeof运算符

sizeof运算符获得值类型数据在内存占用的字节数。sizeof运算符的使用方法如下:sizeof(类型标识符)

它的结果是一个整数,这个整数代表字节数。比如:

sizeof(int) //结果是4。因为每个int型变量占用4个字节。

4.typeof运算符

typeof运算符用于获得一个对象的类型。

5.checked和unchecked运算符

这两个运算符用于控制整数算术运算中当前环境的溢出情况。checked用于检测某些操作的溢出条件,下面代码试图分配不符合short变量范围的值,引发系统错误:short val1=20000, val2=20000;

short myshort=checked((short)(val1+val2)); //出现错误

借助于unchecked运算符,就可以保证即使溢出,也会忽略错误,接受结果,例如:short val1 = 20000, val2 = 20000;

short myshort = unchecked((short)(val1 + val2)); //出现错误,但是被忽略

Console.WriteLine(myshort);

八、多种运算符组成的表达式的运算

在对包含多种运算符表达式求值时,如果有括号,先计算括号里面的表达式。在运行时各运算符执行的先后级别和结合性确定。先执行运算优先级别高的运算,然后执行运算优先级别低的。

当运算符两边的运算对象的优先级别一样时,由运算符的结合性来控制运算执行的顺序。除了赋值运算符,所有的二元运算符都是左结合,即运算按照从左到右的顺序来执行。赋值运行符和条件运算符是右结合的,即运算按照从右到左的顺序来执行。

运算符的优先级和结合性。见教材P50表3-9。

九、实训练习

抓按钮游戏:窗体内有一按钮,当鼠标靠近时会自动弹开,需用鼠标单击按钮方能完成游戏。

相关文档
最新文档