![运算符与表达式课件_第1页](http://file4.renrendoc.com/view/cc64d6e6cb33de4bd50f6d0ba502a070/cc64d6e6cb33de4bd50f6d0ba502a0701.gif)
![运算符与表达式课件_第2页](http://file4.renrendoc.com/view/cc64d6e6cb33de4bd50f6d0ba502a070/cc64d6e6cb33de4bd50f6d0ba502a0702.gif)
![运算符与表达式课件_第3页](http://file4.renrendoc.com/view/cc64d6e6cb33de4bd50f6d0ba502a070/cc64d6e6cb33de4bd50f6d0ba502a0703.gif)
![运算符与表达式课件_第4页](http://file4.renrendoc.com/view/cc64d6e6cb33de4bd50f6d0ba502a070/cc64d6e6cb33de4bd50f6d0ba502a0704.gif)
![运算符与表达式课件_第5页](http://file4.renrendoc.com/view/cc64d6e6cb33de4bd50f6d0ba502a070/cc64d6e6cb33de4bd50f6d0ba502a0705.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章运算符与表达式4.1引言4.2单目运算符4.3双目运算符4.4三目运算符4.5其他运算符4.6标点符号4.7运算符优先级4.8正则表达式4.9小结第4章运算符与表达式4.1引言4.1引言C#提供了多种数据类型,以满足各种数据存储的需要,同时也提供了多种运算符来满足处理、计算数据的需要。根据处理操作对象的个数不同,运算符大致分为三类。单目运算符,又称一元运算符;双目运算符,又称二元运算符;三目运算符,又称三元运算符。大部分运算符都是双目运算符,只有几个单目运算符和一个三目运算符,另外还包括几个其他运算符,下面分别介绍这些运算符。4.1引言C#提供了多种数据类型,以满足各种数据存储的需要4.2单目运算符常见的单目运算符有+(一元加)-(一元减)!(逻辑非)~(按位求补)++(一元递增)--(一元递减)type(强制类型转换运算符)一元加和一元减运算符对所有数值类型均适用;逻辑非运算符只对布尔类型适用;按位求补运算符适用于int、uint、long和ulong类型;递增和递减运算符适用于数值类型和枚举类型。注意,为了提高程序代码的可读性,单目运算符应该紧挨着它们的操作数,不能添加任何干扰性的空字符。4.2单目运算符常见的单目运算符有一元加和一元减运算符一元加和一元减运算符用于改变一个数值变量的正负号。注意,一元加运算符不会对操作对象进行任何改变。示例:decimalbalance=100;Console.WriteLine("输出初始balance的值:{0}",balance);balance=-balance;Console.WriteLine("输出改变后的值balance的值:{0}",balance);balance=+balance;Console.WriteLine("输出改变后的值balance的值:{0}",balance);Console.Read();执行上述代码,结果为100,-100,-100。一元加和一元减运算符一元加和一元减运算符用于改变一个数值变一元加和一元减运算符上述代码中,需要特别说明的是WriteLine()函数,该函数最常用的使用方法如下。Console.WriteLine("HelloWorld!")或Console.WriteLine(x),直接输出括号内字符串常量或某变量的值。Console.WriteLine("x={0}",x),输出字符串,且该字符串中包含某变量。其中,{x}为占位符,输出时它会被变量x的值代替。一元加和一元减运算符上述代码中,需要特别说明的是WriteL逻辑非运算符逻辑非运算符(!)主要用于对操作对象进行取反操作,操作对象只能是bool类型的变量。示例及运行结果:
boola=false;Console.WriteLine("输出!a的值为{0}",!a);逻辑非运算符逻辑非运算符(!)主要用于对操作对象进行取反操作按位求补运算符按位求补运算符(~)用于对操作数执行按位求补运算,其效果相当于对每一位执行反转,按位求补运算符是为int、uint、long和ulong类型预定义的。示例及运行结果:
staticvoidMain(string[]args){inta=2;intb=~a;Console.WriteLine(Convert.ToString(a,2));Console.WriteLine(Convert.ToString(b,2));Console.Read();}按位求补运算符按位求补运算符(~)用于对操作数执行按位求补运一元递增运算符和一元递减运算符一元递增运算符(++),它可以用表达式a++或++a实现变量a的值增1,而不必使用表达式a=a+1和a+=1。注意:此类运算符放在变量的前面称为前置运算符,如++a;放在变量后面称为后置运算符,如a++。前置运算符与后置运算符有所区别,前置运算符先改变变量的值,然后再改变表达式的值;而后置运算符先改变表达式的值,然后再改变变量的值,例如:
j=i++;//相当于j=i;i=i+1;j=++i;//相当于i=i+1;j=i;一元递增运算符和一元递减运算符一元递增运算符(++),它可一元递增运算符和一元递减运算符注意,如果试图对表达式而不是变量参数使用递增或者递减运算符,将会导致语法错误。其中变量参数是指能够出现在赋值运算符左边的变量或表达式。例如,++(x+1)就是一个语法错误,因为x+1不是变量参数。一元递增运算符和一元递减运算符注意,如果试图对表达式而不是变强制类型转换运算符强制类型转换运算符(type)在第3章有过介绍,作用是显式转换变量类型。示例:
inta,b;doublej;a=2;j=a;Console.WriteLine("输出j的值为{0}",j);b=j;//编译错误。需要使用强制类型转换符,应修改为b=(int)j。
强制类型转换运算符强制类型转换运算符(type)在第3章有过4.3双目运算符常见的双目运算符包括:算术运算符位运算符关系运算符类型测试运算符逻辑运算符条件逻辑运算符条件运算符赋值运算符其他运算符4.3双目运算符常见的双目运算符包括:4.3.1算术运算符与算术表达式算术运算符有+(加)、-(减)、*(乘)、/(除)和%(取余),与数学运算符的用法类似,它们的优先级关系与数学运算也是一致的,即先乘除,后加减,同级运算之间按从左至右的顺序进行运算。C#.NET中的“+”运算符有两种用法,一种用于计算两个操作数或表达式的和,另一种可作为连接字符串的连接符例如:1000+“++”+1100,结果生成一个新的字符串“1000++1100”。4.3.1算术运算符与算术表达式算术运算符有+(加)、-使用算术运算符staticvoidMain(string[]args){inta=8;intb=2;stringmyname="nihao!";intc=3;doublef=1.2;Console.WriteLine("输出a+b的值为{0}",a+b);Console.WriteLine("输出a-b的值为{0}",a-b);Console.WriteLine("输出a+myname的值为{0}",a+myname);Console.WriteLine("输出a*b的值为{0}",a*b);Console.WriteLine("输出a/b的值为{0}",a/b);Console.WriteLine("输出a/c的值为{0}",a/c);Console.WriteLine("输出a/f的值为{0}",a/f);Console.WriteLine("输出a%c的值为{0}",a%c);Console.Read();}注意:a/f,由于操作数不是同一个级别上的,系统为了不丢失精度,先将低精度操作数隐式转换为高精度操作数。这里将整型a隐式转换为双精度double型,然后再运算,因此运算结果为6.666666666666667,是双精度型,而非整型。使用算术运算符staticvoidMain(string取余运算符的详细用法注意:C#中取余运算操作数的类型为数值类型,例如浮点型和字符型,而其他语言中取余运算符的操作数只能为整数。示例及运行结果:
staticvoidMain(string[]args){inta=8,j=3,b=-3,c=-8;doubled=8.1;Console.WriteLine("输出a%j的值为{0}",a%j);Console.WriteLine("输出a%b的值为{0}",a%b);Console.WriteLine("输出c%j的值为{0}",c%j);Console.WriteLine("输出d%j的值为{0}",d%j);Console.Read();}取余运算符的详细用法注意:C#中取余运算操作数的类型为数值4.3.2位运算符与位表达式位运算符用于对操作数的位进行运算,常用二元位运算符如右表。
运算符类别操作&二元与|二元或^二元异或<<二元左移>>二元右移4.3.2位运算符与位表达式位运算符用于对操作数的位进行按位与此运算符的作用是将两个操作数对应的每一个位分别进行逻辑与操作,具体规则为:与1相与,结果不变;与0相与,结果为0。例如,计算3&5,运算过程如下。 3: 00000011 5:(&) 00000101 3&5: 00000001运算结果为1。使用按位与操作可以将操作数的若干位置0,其他位不变。按位与此运算符的作用是将两个操作数对应的每一个位分别进行逻辑按位或此运算符的作用是将两个操作数对应的每一位分别进行逻辑或操作,具体规则为:与1相或,结果为1;与0相或,结果不变。例如,计算3|5,运算过程如下。3: 00000011 5:(|) 00000101 3|5: 00000111运算结果为7。使用按位或操作可以将操作数中的若干位置1,其他位不变。按位或此运算符的作用是将两个操作数对应的每一位分别进行逻辑或按位异或此运算符的作用是将两个操作数对应的每一位进行异或,具体规则为:若对应位相同,则该位的运算结果为0;若对应位不同,则该位的运算结果为1。例如,计算3^5,运算过程如下。 3: 00000011 5:(^) 00000101 3^5: 00000110使用按位异或操作可以将操作数中的若干指定位的值翻转。如果使某位与0异或,结果是该位的原值;如果使某位与1异或,则结果与该位原来的值相反。按位异或此运算符的作用是将两个操作数对应的每一位进行异或,具移位运算符移位运算符有<<(左移运算符)、>>(右移运算符)两个。左移是按照指定的位数将一个数的二进制值向左移位。左移后,低位补0,移出的高位舍弃。右移是按照指定的位数将一个数的二进制值向右移位。右移后,移出的低位舍弃。注意:若右移运算符的操作数是int或long型,最高位为符号位;若该操作数是非负数,则最高位设为0;若操作数为负数,则最高位设为1。若右移运算符的操作数为uint或者ulong型,没有符号位,则操作数各位依次右移,高位设为0。移位运算符移位运算符有<<(左移运算符)、>>(右移运算符)移位运算符移位运算符示例:staticvoidMain(string[]args){inta=2,b=-8;intc,d;Console.WriteLine("输出a的值为{0}",a);c=a<<2;d=a>>2;Console.WriteLine("输出a左移两位后的值为{0}",c);Console.WriteLine("输出a右移两位后的值为{0}",d);Console.WriteLine("输出b右移两位后的值为{0}",b>>2);Console.WriteLine("输出a的值为{0}",a);Console.Read();}移位运算符移位运算符示例:4.3.3关系运算符与关系表达式在解决许多问题时都需要进行情况判断,对复杂的条件进行逻辑分析。C#中也提供了用于比较、判断的关系运算符和用于逻辑分析的逻辑运算符。关系运算符是比较简单的一种逻辑运算。通过关系运算符将两个操作数连接起来,即为关系表达式。关系表达式的结果为bool类型,值只能为true或false。关系运算符包括==、!=、<、>、<=和>=。其中,<、>、<=、和>=运算符适用于整数类型、浮点类型和decimal类型;==和!=运算符适用于整数类型、浮点类型、decimal类型、布尔类型、枚举类型、引用类型、字符串类型和委托类型。4.3.3关系运算符与关系表达式在解决许多问题时都需要常用关系运算符C#中的符号标准数学中的符号C#中的条件范例C#中的条件含义===x==yx等于y!=≠x!=yx不等于y>>x>yx大于y<<x<yx小于y>=≥x>=yx大于等于y常用关系运算符C#中的符号标准数学中的符号C#中的条件范例C使用关系运算符
classProgram{enumRange:long{max=214L,min=123L};staticvoidMain(string[]args){boolx=false,y=true;Console.WriteLine("{0}",x==y);Rangea=Range.max,b=Range.min;Console.WriteLine("{0}",a==b);stringm="testequal";stringn=m;Console.WriteLine("{0}",m==n);Console.Read();}}使用关系运算符classProgram4.3.4类型测试运算符与类型测试表达式类型测试运算符主要用于更安全地进行强制类型转换,包括is运算符和as运算符。is运算符用于查看未知变量是否为给定类型的变量,或者是否为给定类型派生出来的类型的变量。如果是,则返回true。is运算符的语法形式如下:<obj>is<type>4.3.4类型测试运算符与类型测试表达式类型测试运算符4.3.4类型测试运算符与类型测试表达式is运算符示例及运行结果:staticvoidMain(string[]args){stringa="yes";intb=0;if(aisstring)Console.WriteLine("Itisastring");elseConsole.WriteLine("Itisnotastring");if(bisstring)Console.WriteLine("Itisastring");elseConsole.WriteLine("Itisnotastring");Console.Read();}
4.3.4类型测试运算符与类型测试表达式is运算符示例及运行4.3.4类型测试运算符与类型测试表达式as运算符用于将一个值显式地转换(使用引用转换或装箱转换)为一个给定的引用类型。如果要转换的类型与指定的类型兼容,转换就会成功执行;如果类型不兼容,as运算符就会返回null。这里的兼容是指对象是该类型或派生于该类型。注意as运算符必须与引用类型一起使用,int等值类型不能使用。as运算符的语法形式如下:<obj>as<type>4.3.4类型测试运算符与类型测试表达式as运算符用于将一个4.3.4类型测试运算符与类型测试表达式as运算符示例及运行结果:staticvoidMain(string[]args){objecta1="nihao";objecta2=12;strings1=a1asstring;strings2=a2asstring;Console.WriteLine("输出s1的值{0}",s1);Console.WriteLine("输出s2的值{0}",s2);Console.Read();}4.3.4类型测试运算符与类型测试表达式as运算符示例及运4.3.5逻辑运算符与逻辑表达式只有简单的关系比较是远不能满足实际编程需要的,还需要使用逻辑运算符将简单的关系表达式连接起来,构成比较复杂的逻辑表达式。为了在判断过程中测试多个条件,C#语言提供了一些逻辑运算符和条件逻辑运算符,可以利用它们组合成复杂的条件。注意,逻辑运算符的操作对象必须是bool类型,且逻辑运算符会计算所有的操作数。4.3.5逻辑运算符与逻辑表达式只有简单的关系比较是远常用逻辑运算符运算符类别范例结果!一元var1=!var2将var2取反后赋给var`1&二元var1=var2&var3将var2和var3取与后赋给var1|二元var1=var2|var3将var2和var3取或后赋给var1^二元var1=var2^var3将var2和var3取异或后赋给var1常用逻辑运算符运算符类别范例结果!一元var1=!var24.3.5逻辑运算符与逻辑表达式逻辑与运算符示例及运行结果:
staticvoidMain(string[]args){intgender=1,age=65;if(gender==1&(++age>=65))Console.WriteLine("输出age的值为{0}",age);if(gender!=1&(++age>=65))Console.WriteLine("输出age的值为{0}",age);Console.WriteLine("输出age的值为{0}",age);Console.Read();}4.3.5逻辑运算符与逻辑表达式逻辑与运算符示例及运行结4.3.5逻辑运算符与逻辑表达式逻辑或运算符示例及运行结果:staticvoidMain(string[]args){intgender=1,age=65;if(gender==1|(++age>=65))Console.WriteLine("输出age的值为{0}",age);if(gender!=1|(++age>=65))Console.WriteLine("输出age的值为{0}",age);Console.WriteLine("输出age的值为{0}",age);Console.Read();}4.3.5逻辑运算符与逻辑表达式逻辑或运算符示例及运行结4.3.6条件逻辑运算符与条件逻辑表达式条件与(&&)和条件或(||)运算符称为条件逻辑运算符。包含条件逻辑运算符的表达式称为条件逻辑表达式。运算符类别范例结果&&二元var1=var2&&var3将var2和var3相与后赋给var1,仅当var2为true时,才计算var3||二元var1=var2||var3将var2和var3相或后赋给var1,仅当var2为false时,才计算var34.3.6条件逻辑运算符与条件逻辑表达式条件与(&&)4.3.6条件逻辑运算符与条件逻辑达式条件逻辑运算符&&示例及运行结果:staticvoidMain(string[]args){intgender=1,age=65;if(gender==1&&(++age>=65))Console.WriteLine("输出age的值为{0}",age);if(gender!=1&&(++age>=65))Console.WriteLine("输出age的值为{0}",age);Console.WriteLine("输出age的值为{0}",age);Console.Read();}4.3.6条件逻辑运算符与条件逻辑达式条件逻辑运算符&&4.3.6条件逻辑运算符与条件逻辑表达式条件逻辑运算符||示例及运行结果:staticvoidMain(string[]args){intgender=1,age=65;if(gender==1||(++age>=65))Console.WriteLine("输出age的值为{0}",age);if(gender!=1||(++age>=65))Console.WriteLine("输出age的值为{0}",age);Console.WriteLine("输出age的值为{0}",age);Console.Read();}4.3.6条件逻辑运算符与条件逻辑表达式条件逻辑运算符|4.3.7赋值运算符与赋值表达式赋值运算符(=)用于为变量、属性、事件或索引器元素赋值。除了直接赋值以外,C#语言还提供了用于简化赋值表达式的快捷赋值运算符。例如,语句c=c+3可以简化为c+=3。运算符含义运算符含义+=加法&=位与-=减法|=位或*=乘法^=位异或/=除法~=位非++x前加<<=左移--x前减>>=右移x++后加x--后减4.3.7赋值运算符与赋值表达式赋值运算符(=)用于为4.4三目运算符三目运算符就是包含3个操作数的运算符。条件运算符是唯一的三元运算符,它由“?”和“:”两个标点符号组成,它的3个对象均是表达式。语法形式如下:<condition>?<expression1>:<expression2>先计算条件condition,如果计算结果为true,则计算expression1的值,且整个表达式的值是expression1的值;如果计算结果为false,则计算expression2的值,且整个表达式的值是expression2的值。注意,条件计算的结果必须为bool型,否则会出错。4.4三目运算符三目运算符就是包含3个操作数的运算符。条4.4三目运算符三目运算符示例及运行结果:
inta=1;strings=a.ToString()+"";s+=(a==1?"man":"men");Console.WriteLine(s);Console.Read();4.4三目运算符三目运算符示例及运行结果:4.5其他运算符checked运算符与unchecked运算符在进行整数算术运算(如+、-、×、/等)或从一种整型显式转换到另一种整型时,有可能发生溢出。checked运算符用于进行溢出检查,有溢出时会引发异常。而被unchecked运算符包括的代码即使有溢出,也不会引发异常,只是返回值被截掉不符合目标类型的高位。4.5其他运算符checked运算符与unchecked4.5其他运算符VisualStudio2008编译器默认设置为不检查运算溢出,因此程序中即使有溢出,也不会引发异常,返回值也只是被截掉不符合目标类型的高位。如果需要开启检查运算溢出,则需要在VisualStudio2008开发环境中设置此编译器选项,设置步骤如下。(1)打开项目的【属性】窗口。(2)单击左侧的【生成】选项。(3)单击【高级】按钮。(4)勾选【检查算法上溢/下溢】复选框,使用checked运算符,将强制编译器检查被checked标记包括的代码块中是否有运算溢出。使用unchecked关运算符,强制编译器不检查这几行代码是否有运算溢出。4.5其他运算符VisualStudio2008编译4.5其他运算符check运算符示例及运行结果:byteb=255;checked{b++;}Console.WriteLine(b.ToString());4.5其他运算符check运算符示例及运行结果:4.5其他运算符sizeof运算符sizeof运算符用于确定值类型的长度,单位为字节。注意,sizeof运算符仅适用于值类型,而不适用于引用类型。示例:
Console.WriteLine(sizeof(int));运行结果显示数字4,因为int有4个字节4.5其他运算符sizeof运算符4.5其他运算符typeof运算符typeof运算符用于返回一个表示特定类型的System.Type对象,例如typeof(int)返回System.Int32对象。示例及运行结果:staticvoidMain(string[]args){inta=8;stringz;z="加油哦!";stringc=a+z;Console.WriteLine("输出a的类型{0}",typeof(int));Console.WriteLine("输出c的类型{0}",c.GetType());Console.Read();}4.5其他运算符typeof运算符4.5其他运算符new运算符new运算符用于创建新的类型实例,可以创建类类型、值类型、数组类型和委托类型。示例:
Classzhanghua=newPerson();intmyint=newint();string[]array=newstring[4];4.5其他运算符new运算符4.6标点符号标点符号是某些运算符的重要组成部分,能够为代码编写带来很多的方便。例如,三目运算符,就是由两个标点符号“?”和“:”组成的运算符。常见的标点符号——点符号(.),点符号(.)在访问类成员、访问枚举成员以及在正则表达式中都会用到。4.6标点符号标点符号是某些运算符的重要组成部分,能够为使用点符号classProgram{classStudent{stringsno;stringsname;publicStudent(stringno,stringname){sno=no;sname=name;}publicvoiddisplay(){Console.WriteLine("学生的学号是{0}",sno);Console.WriteLine("学生的姓名是{0}",sname);}}staticvoidMain(string[]args){Studenta1=newStudent("01","xiaoming");a1.display();Console.Read();}}使用点符号classProgram4.7运算符优先级当表达式中包含多个运算符时,哪个运算符先参加运算是由运算符的优先级来决定的,高优先级的运算符会先参加运算。4.7运算符优先级当表达式中包含多个运算符时,哪个运算符优先级类别运算符
高低基本.、()、[]、x++、x--、new、typeof、checked、unchecked一元+、-、!、~、++x、--x、(T)x乘除*、/、%加减+、-移位<<、>>关系和类型测试<、>、<=、>=、is、as相等==、!=逻辑与&异或^或|条件与&&或||条件?:赋值=、*=、/=、%=、+=、-=、<<=、>>=、&=、^=、|=优先级类别运算符
基本.、()、[]、x++、x--、ne当表达式中出现两个具有相同优先级的运算符时,将根据结合性计算它们—>表示从左向右,<—表示从右向左运算符结合性类型()—>圆括号++、--<—一元后缀++、--、+、-、(type)<—一元前缀*、/、%—>乘法+、-—>加法<、<=、>、>=—>关系==、!==—>相等?:—>条件=、+=、-=、*=、/=、%=<—赋值&—>逻辑和^—>逻辑异或|—>逻辑或&&—>条件和||—>条件或当表达式中出现两个具有相同优先级的运算符时,将根据结合性计算4.7运算符优先级运算符优先级示例及运行结果:staticvoidMain(string[]args){inta=1,b=2,c=3;boolf=true;boolm;m=a+++b+c>>2==1&&f;Console.WriteLine("{0}",m);Console.WriteLine("{0}",a);Console.Read();}4.7运算符优先级运算符优先级示例及运行结果:4.7运算符优先级运算符结合性示例及运行结果:staticvoidMain(string[]args){inta;intb=2;Console.WriteLine("{0}",a=b*=3);Console.WriteLine("输出b的值为{0}",b);Console.Read();}4.7运算符优先级运算符结合性示例及运行结果:4.8正则表达式正则表达式就是用某种规则去匹配指定字符串的一种表示方式,它由普通字符和元字符组成。普通字符指我们平常使用的字符,如字母、数字、汉字等;元字符指可以匹配某些字符形式的具有特殊含义的字符,其作用类似于DOS命令使用的通配符。4.8正则表达式正则表达式就是用某种规则去匹配指定字符串基本书写符号符号含义示例解释匹配输入\转义符\*符号“*”*[]可接收的字符列表[abcd]a、b、c、d中任意一个字符a、b、c、d[^]不接收的字符列表[^abcd]除a、b、c、d之外的任意1个字符,包括数字和特殊字符d、e、f、1|匹配“|”之前或之后的表达式ab|cdab或cdab、cd()将子表达式分组(abc)将字符串abc作为一组abc-连字符a-z任意单个小写字母小写字母基本书写符号符号含义示例解释匹配输入\转义符\*符号“*”*限定符符号含义示例解释匹配输入不匹配输入*指定字符重复0次或n次(abc)*仅包含任意个abc的字符串abc、abcabcabca、bca+指定字符重复1次或n次m+(abc)*以至少1个m开头,后接任意个abc的字符串m、mabc、mabcabcma、abc?指定字符重复0次或1次m+abc?以至少1个m开头,后接ab或abc的字符串mab、mabcmmmab、mmabcab、abc、mabcc^指定起始字符^[0-9]+[a-z]*以至少1个数字开头,后接任意个小写字母的字符串123、6aa、555edfabc、aaa、a33限定符符号含义示例解释匹配输入不匹配输入*指定字符重复0次限定符(续)$指定结束字符^[0-9]\-[a-z]+$以1个数字开头,后接连字符“-”,并以至少1个小写字母结尾的字符串2-a、3-ddd、5-efg33a、8-、7-ab{n}只能输入n个字符[abcd]{3}由abcd中字母组成的任意长度为3的字符串abc、dbc、adca、aa、dcbd{n,}至少输入n个字符[abcd]{3,}由abcd中字母组成的任意长度不小于为3的字符串aab、dbc、aaabdca、cd、bb{n,m}输入至少n个,至多m个字符的字符串[abcd]{3,5}由abcd中字母组成的任意长度不小于为3,不大于5的字符串abc、abcd、aaaaa、bcdabab、ababab、a限定符(续)$指定结束字符^[0-9]\-[a-z]+$以1匹配字符集符号含义示例解释匹配输入不匹配输入.匹配除换行(\n)之外的任何单个字符a..b以a开头,b结尾,中间包括两个任意字符,长度为4的字串aaab、aefb、a35b、a#*bab、aaaa、a347b\d匹配单个数字字符相当于[0-9]\d{3}(\d)?包含3个或4个数字的字符串123、987612、01023\D匹配单个非数字字符相当于[^0-9]\D(\d)*以单个非数字字符开头,后接任意个数字字符串a、A342aa、AA78、1234\w匹配单个数字、大小写字母字符,相当于[0-9a-zA-Z]\d{3}\w{4}以3个数字字符开头的长度为7的数字字母字符串234abcd、12345Pe58a、Ra46\W匹配单个非数字、大小写字母字符,相当于[^0-9a-zA-Z]\W+\d{2}以至少1个非数字字母字符开头,两个数字字符结尾的字符串#29、#?@1023、#?@100匹配字符集符号含义示例解释匹配输入不匹配输入.匹配除换行(正则表达式书写举例至少一个字符:.{0,}。3个“.”句点符号:\.{3}。括号括起来的2~3个数字构成的字符串:\([0-9]{2,3}\),其中反斜杠(\)表示转义。国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7}),其中一种是三位区号,8位本地号(,另一种是4位区号,7位本地号(,且区号可有可无。至少3个汉字:[\u4e00-\u9fa5]{3,},其中\u4e00-\u9fa5是UTF8编码中汉字的范围。必须包含“cd”的字符串:.{0,}cd.{0,}。正则表达式书写举例至少一个字符:.{0,}。4.9小结通过本章的学习,对基本的运算符与表达式有了一定的认识,对于后续的编程学习将非常有用。4.9小结通过本章的学习,对基本的运算符与表达式有了一定第4章运算符与表达式4.1引言4.2单目运算符4.3双目运算符4.4三目运算符4.5其他运算符4.6标点符号4.7运算符优先级4.8正则表达式4.9小结第4章运算符与表达式4.1引言4.1引言C#提供了多种数据类型,以满足各种数据存储的需要,同时也提供了多种运算符来满足处理、计算数据的需要。根据处理操作对象的个数不同,运算符大致分为三类。单目运算符,又称一元运算符;双目运算符,又称二元运算符;三目运算符,又称三元运算符。大部分运算符都是双目运算符,只有几个单目运算符和一个三目运算符,另外还包括几个其他运算符,下面分别介绍这些运算符。4.1引言C#提供了多种数据类型,以满足各种数据存储的需要4.2单目运算符常见的单目运算符有+(一元加)-(一元减)!(逻辑非)~(按位求补)++(一元递增)--(一元递减)type(强制类型转换运算符)一元加和一元减运算符对所有数值类型均适用;逻辑非运算符只对布尔类型适用;按位求补运算符适用于int、uint、long和ulong类型;递增和递减运算符适用于数值类型和枚举类型。注意,为了提高程序代码的可读性,单目运算符应该紧挨着它们的操作数,不能添加任何干扰性的空字符。4.2单目运算符常见的单目运算符有一元加和一元减运算符一元加和一元减运算符用于改变一个数值变量的正负号。注意,一元加运算符不会对操作对象进行任何改变。示例:decimalbalance=100;Console.WriteLine("输出初始balance的值:{0}",balance);balance=-balance;Console.WriteLine("输出改变后的值balance的值:{0}",balance);balance=+balance;Console.WriteLine("输出改变后的值balance的值:{0}",balance);Console.Read();执行上述代码,结果为100,-100,-100。一元加和一元减运算符一元加和一元减运算符用于改变一个数值变一元加和一元减运算符上述代码中,需要特别说明的是WriteLine()函数,该函数最常用的使用方法如下。Console.WriteLine("HelloWorld!")或Console.WriteLine(x),直接输出括号内字符串常量或某变量的值。Console.WriteLine("x={0}",x),输出字符串,且该字符串中包含某变量。其中,{x}为占位符,输出时它会被变量x的值代替。一元加和一元减运算符上述代码中,需要特别说明的是WriteL逻辑非运算符逻辑非运算符(!)主要用于对操作对象进行取反操作,操作对象只能是bool类型的变量。示例及运行结果:
boola=false;Console.WriteLine("输出!a的值为{0}",!a);逻辑非运算符逻辑非运算符(!)主要用于对操作对象进行取反操作按位求补运算符按位求补运算符(~)用于对操作数执行按位求补运算,其效果相当于对每一位执行反转,按位求补运算符是为int、uint、long和ulong类型预定义的。示例及运行结果:
staticvoidMain(string[]args){inta=2;intb=~a;Console.WriteLine(Convert.ToString(a,2));Console.WriteLine(Convert.ToString(b,2));Console.Read();}按位求补运算符按位求补运算符(~)用于对操作数执行按位求补运一元递增运算符和一元递减运算符一元递增运算符(++),它可以用表达式a++或++a实现变量a的值增1,而不必使用表达式a=a+1和a+=1。注意:此类运算符放在变量的前面称为前置运算符,如++a;放在变量后面称为后置运算符,如a++。前置运算符与后置运算符有所区别,前置运算符先改变变量的值,然后再改变表达式的值;而后置运算符先改变表达式的值,然后再改变变量的值,例如:
j=i++;//相当于j=i;i=i+1;j=++i;//相当于i=i+1;j=i;一元递增运算符和一元递减运算符一元递增运算符(++),它可一元递增运算符和一元递减运算符注意,如果试图对表达式而不是变量参数使用递增或者递减运算符,将会导致语法错误。其中变量参数是指能够出现在赋值运算符左边的变量或表达式。例如,++(x+1)就是一个语法错误,因为x+1不是变量参数。一元递增运算符和一元递减运算符注意,如果试图对表达式而不是变强制类型转换运算符强制类型转换运算符(type)在第3章有过介绍,作用是显式转换变量类型。示例:
inta,b;doublej;a=2;j=a;Console.WriteLine("输出j的值为{0}",j);b=j;//编译错误。需要使用强制类型转换符,应修改为b=(int)j。
强制类型转换运算符强制类型转换运算符(type)在第3章有过4.3双目运算符常见的双目运算符包括:算术运算符位运算符关系运算符类型测试运算符逻辑运算符条件逻辑运算符条件运算符赋值运算符其他运算符4.3双目运算符常见的双目运算符包括:4.3.1算术运算符与算术表达式算术运算符有+(加)、-(减)、*(乘)、/(除)和%(取余),与数学运算符的用法类似,它们的优先级关系与数学运算也是一致的,即先乘除,后加减,同级运算之间按从左至右的顺序进行运算。C#.NET中的“+”运算符有两种用法,一种用于计算两个操作数或表达式的和,另一种可作为连接字符串的连接符例如:1000+“++”+1100,结果生成一个新的字符串“1000++1100”。4.3.1算术运算符与算术表达式算术运算符有+(加)、-使用算术运算符staticvoidMain(string[]args){inta=8;intb=2;stringmyname="nihao!";intc=3;doublef=1.2;Console.WriteLine("输出a+b的值为{0}",a+b);Console.WriteLine("输出a-b的值为{0}",a-b);Console.WriteLine("输出a+myname的值为{0}",a+myname);Console.WriteLine("输出a*b的值为{0}",a*b);Console.WriteLine("输出a/b的值为{0}",a/b);Console.WriteLine("输出a/c的值为{0}",a/c);Console.WriteLine("输出a/f的值为{0}",a/f);Console.WriteLine("输出a%c的值为{0}",a%c);Console.Read();}注意:a/f,由于操作数不是同一个级别上的,系统为了不丢失精度,先将低精度操作数隐式转换为高精度操作数。这里将整型a隐式转换为双精度double型,然后再运算,因此运算结果为6.666666666666667,是双精度型,而非整型。使用算术运算符staticvoidMain(string取余运算符的详细用法注意:C#中取余运算操作数的类型为数值类型,例如浮点型和字符型,而其他语言中取余运算符的操作数只能为整数。示例及运行结果:
staticvoidMain(string[]args){inta=8,j=3,b=-3,c=-8;doubled=8.1;Console.WriteLine("输出a%j的值为{0}",a%j);Console.WriteLine("输出a%b的值为{0}",a%b);Console.WriteLine("输出c%j的值为{0}",c%j);Console.WriteLine("输出d%j的值为{0}",d%j);Console.Read();}取余运算符的详细用法注意:C#中取余运算操作数的类型为数值4.3.2位运算符与位表达式位运算符用于对操作数的位进行运算,常用二元位运算符如右表。
运算符类别操作&二元与|二元或^二元异或<<二元左移>>二元右移4.3.2位运算符与位表达式位运算符用于对操作数的位进行按位与此运算符的作用是将两个操作数对应的每一个位分别进行逻辑与操作,具体规则为:与1相与,结果不变;与0相与,结果为0。例如,计算3&5,运算过程如下。 3: 00000011 5:(&) 00000101 3&5: 00000001运算结果为1。使用按位与操作可以将操作数的若干位置0,其他位不变。按位与此运算符的作用是将两个操作数对应的每一个位分别进行逻辑按位或此运算符的作用是将两个操作数对应的每一位分别进行逻辑或操作,具体规则为:与1相或,结果为1;与0相或,结果不变。例如,计算3|5,运算过程如下。3: 00000011 5:(|) 00000101 3|5: 00000111运算结果为7。使用按位或操作可以将操作数中的若干位置1,其他位不变。按位或此运算符的作用是将两个操作数对应的每一位分别进行逻辑或按位异或此运算符的作用是将两个操作数对应的每一位进行异或,具体规则为:若对应位相同,则该位的运算结果为0;若对应位不同,则该位的运算结果为1。例如,计算3^5,运算过程如下。 3: 00000011 5:(^) 00000101 3^5: 00000110使用按位异或操作可以将操作数中的若干指定位的值翻转。如果使某位与0异或,结果是该位的原值;如果使某位与1异或,则结果与该位原来的值相反。按位异或此运算符的作用是将两个操作数对应的每一位进行异或,具移位运算符移位运算符有<<(左移运算符)、>>(右移运算符)两个。左移是按照指定的位数将一个数的二进制值向左移位。左移后,低位补0,移出的高位舍弃。右移是按照指定的位数将一个数的二进制值向右移位。右移后,移出的低位舍弃。注意:若右移运算符的操作数是int或long型,最高位为符号位;若该操作数是非负数,则最高位设为0;若操作数为负数,则最高位设为1。若右移运算符的操作数为uint或者ulong型,没有符号位,则操作数各位依次右移,高位设为0。移位运算符移位运算符有<<(左移运算符)、>>(右移运算符)移位运算符移位运算符示例:staticvoidMain(string[]args){inta=2,b=-8;intc,d;Console.WriteLine("输出a的值为{0}",a);c=a<<2;d=a>>2;Console.WriteLine("输出a左移两位后的值为{0}",c);Console.WriteLine("输出a右移两位后的值为{0}",d);Console.WriteLine("输出b右移两位后的值为{0}",b>>2);Console.WriteLine("输出a的值为{0}",a);Console.Read();}移位运算符移位运算符示例:4.3.3关系运算符与关系表达式在解决许多问题时都需要进行情况判断,对复杂的条件进行逻辑分析。C#中也提供了用于比较、判断的关系运算符和用于逻辑分析的逻辑运算符。关系运算符是比较简单的一种逻辑运算。通过关系运算符将两个操作数连接起来,即为关系表达式。关系表达式的结果为bool类型,值只能为true或false。关系运算符包括==、!=、<、>、<=和>=。其中,<、>、<=、和>=运算符适用于整数类型、浮点类型和decimal类型;==和!=运算符适用于整数类型、浮点类型、decimal类型、布尔类型、枚举类型、引用类型、字符串类型和委托类型。4.3.3关系运算符与关系表达式在解决许多问题时都需要常用关系运算符C#中的符号标准数学中的符号C#中的条件范例C#中的条件含义===x==yx等于y!=≠x!=yx不等于y>>x>yx大于y<<x<yx小于y>=≥x>=yx大于等于y常用关系运算符C#中的符号标准数学中的符号C#中的条件范例C使用关系运算符
classProgram{enumRange:long{max=214L,min=123L};staticvoidMain(string[]args){boolx=false,y=true;Console.WriteLine("{0}",x==y);Rangea=Range.max,b=Range.min;Console.WriteLine("{0}",a==b);stringm="testequal";stringn=m;Console.WriteLine("{0}",m==n);Console.Read();}}使用关系运算符classProgram4.3.4类型测试运算符与类型测试表达式类型测试运算符主要用于更安全地进行强制类型转换,包括is运算符和as运算符。is运算符用于查看未知变量是否为给定类型的变量,或者是否为给定类型派生出来的类型的变量。如果是,则返回true。is运算符的语法形式如下:<obj>is<type>4.3.4类型测试运算符与类型测试表达式类型测试运算符4.3.4类型测试运算符与类型测试表达式is运算符示例及运行结果:staticvoidMain(string[]args){stringa="yes";intb=0;if(aisstring)Console.WriteLine("Itisastring");elseConsole.WriteLine("Itisnotastring");if(bisstring)Console.WriteLine("Itisastring");elseConsole.WriteLine("Itisnotastring");Console.Read();}
4.3.4类型测试运算符与类型测试表达式is运算符示例及运行4.3.4类型测试运算符与类型测试表达式as运算符用于将一个值显式地转换(使用引用转换或装箱转换)为一个给定的引用类型。如果要转换的类型与指定的类型兼容,转换就会成功执行;如果类型不兼容,as运算符就会返回null。这里的兼容是指对象是该类型或派生于该类型。注意as运算符必须与引用类型一起使用,int等值类型不能使用。as运算符的语法形式如下:<obj>as<type>4.3.4类型测试运算符与类型测试表达式as运算符用于将一个4.3.4类型测试运算符与类型测试表达式as运算符示例及运行结果:staticvoidMain(string[]args){objecta1="nihao";objecta2=12;strings1=a1asstring;strings2=a2asstring;Console.WriteLine("输出s1的值{0}",s1);Console.WriteLine("输出s2的值{0}",s2);Console.Read();}4.3.4类型测试运算符与类型测试表达式as运算符示例及运4.3.5逻辑运算符与逻辑表达式只有简单的关系比较是远不能满足实际编程需要的,还需要使用逻辑运算符将简单的关系表达式连接起来,构成比较复杂的逻辑表达式。为了在判断过程中测试多个条件,C#语言提供了一些逻辑运算符和条件逻辑运算符,可以利用它们组合成复杂的条件。注意,逻辑运算符的操作对象必须是bool类型,且逻辑运算符会计算所有的操作数。4.3.5逻辑运算符与逻辑表达式只有简单的关系比较是远常用逻辑运算符运算符类别范例结果!一元var1=!var2将var2取反后赋给var`1&二元var1=var2&var3将var2和var3取与后赋给var1|二元var1=var2|var3将var2和var3取或后赋给var1^二元var1=var2^var3将var2和var3取异或后赋给var1常用逻辑运算符运算符类别范例结果!一元var1=!var24.3.5逻辑运算符与逻辑表达式逻辑与运算符示例及运行结果:
staticvoidMain(string[]args){intgender=1,age=65;if(gender==1&(++age>=65))Console.WriteLine("输出age的值为{0}",age);if(gender!=1&(++age>=65))Console.WriteLine("输出age的值为{0}",age);Console.WriteLine("输出age的值为{0}",age);Console.Read();}4.3.5逻辑运算符与逻辑表达式逻辑与运算符示例及运行结4.3.5逻辑运算符与逻辑表达式逻辑或运算符示例及运行结果:staticvoidMain(string[]args){intgender=1,age=65;if(gender==1|(++age>=65))Console.WriteLine("输出age的值为{0}",age);if(gender!=1|(++age>=65))Console.WriteLine("输出age的值为{0}",age);Console.WriteLine("输出age的值为{0}",age);Console.Read();}4.3.5逻辑运算符与逻辑表达式逻辑或运算符示例及运行结4.3.6条件逻辑运算符与条件逻辑表达式条件与(&&)和条件或(||)运算符称为条件逻辑运算符。包含条件逻辑运算符的表达式称为条件逻辑表达式。运算符类别范例结果&&二元var1=var2&&var3将var2和var3相与后赋给var1,仅当var2为true时,才计算var3||二元var1=var2||var3将var2和var3相或后赋给var1,仅当var2为false时,才计算var34.3.6条件逻辑运算符与条件逻辑表达式条件与(&&)4.3.6条件逻辑运算符与条件逻辑达式条件逻辑运算符&&示例及运行结果:staticvoidMain(string[]args){intgender=1,age=65;if(gender==1&&(++age>=65))Console.WriteLine("输出age的值为{0}",age);if(gender!=1&&(++age>=65))Console.WriteLine("输出age的值为{0}",age);Console.WriteLine("输出age的值为{0}",age);Console.Read();}4.3.6条件逻辑运算符与条件逻辑达式条件逻辑运算符&&4.3.6条件逻辑运算符与条件逻辑表达式条件逻辑运算符||示例及运行结果:staticvoidMain(string[]args){intgender=1,age=65;if(gender==1||(++age>=65))Console.WriteLine("输出age的值为{0}",age);if(gender!=1||(++age>=65))Console.WriteLine("输出age的值为{0}",age);Console.WriteLine("输出age的值为{0}",age);Console.Read();}4.3.6条件逻辑运算符与条件逻辑表达式条件逻辑运算符|4.3.7赋值运算符与赋值表达式赋值运算符(=)用于为变量、属性、事件或索引器元素赋值。除了直接赋值以外,C#语言还提供了用于简化赋值表达式的快捷赋值运算符。例如,语句c=c+3可以简化为c+=3。运算符含义运算符含义+=加法&=位与-=减法|=位或*=乘法^=位异或/=除法~=位非++x前加<<=左移--x前减>>=右移x++后加x--后减4.3.7赋值运算符与赋值表达式赋值运算符(=)用于为4.4三目运算符三目运算符就是包含3个操作数的运算符。条件运算符是唯一的三元运算符,它由“?”和“:”两个标点符号组成,它的3个对象均是表达式。语法形式如下:<condition>?<expression1>:<expression2>先计算条件condition,如果计算结果为true,则计算expression1的值,且整个表达式的值是expression1的值;如果计算结果为false,则计算expression2的值,且整个表达式的值是expression2的值。注意,条件计算的结果必须为bool型,否则会出错。4.4三目运算符三目运算符就是包含3个操作数的运算符。条4.4三目运算符三目运算符示例及运行结果:
inta=1;strings=a.ToString()+"";s+=(a==1?"man":"men");Console.WriteLine(s);Console.Read();4.4三目运算符三目运算符示例及运行结果:4.5其他运算符checked运算符与unchecked运算符在进行整数算术运算(如+、-、×、/等)或从一种整型显式转换到另一种整型时,有可能发生溢出。checked运算符用于进行溢出检查,有溢出时会引发异常。而被unchecked运算符包括的代码即使有溢出,也不会引发异常,只是返回值被截掉不符合目标类型的高位。4.5其他运算符checked运算符与unchecked4.5其他运算符VisualStudio2008编译器默认设置为不检查运算溢出,因此程序中即使有溢出,也不会引发异常,返回值也只是被截掉不符合目标类型的高位。如果需要开启检查运算溢出,则需要在VisualStudio2008开发环境中设置此编译器选项,设置步骤如下。(1)打开项目的【属性】窗口。(2)单击左侧的【生成】选项。(3)单击【高级】按钮。(4)勾选【检查算法上溢/下溢】复选框,使用checked运算符,将强制编译器检查被checked标记包括的代码块中是否有运算溢出。使用unchecked关运算符,强制编译器不检查这几行代码是否有运算溢出。4.5其他运算符VisualStudio2008编译4.5其他运算符check运算符示例及运行结果:byteb=255;checked{b++;}Console.WriteLine(b.ToString());4.5其他运算符check运算符示例及运行结果:4.5其他运算符sizeof运算符sizeof运算符用于确定值类型的长度,单位为字节。注意,sizeof运算符仅适用于值类型,而不适用于引用类型。示例:
Console.WriteLine(sizeof(int));运行结果显示数字4,因为int有4个字节4.5其他运算符sizeof运算符4.5其他运算符typeof运算符typeof运算符用于返回一个表示特定类型的System.Type对象,例如typeof(int)返回System.Int32对象。示例及运行结果:staticvoidMain(string[]args){inta=8;stringz;z="加油哦!";stringc=a+z;Console.WriteLine("输出a的类型{0}",typeof(int));Console.WriteLine("输出c的类型{0}",c.GetType());Console.Read();}4.5其他运算符typeof运算符4.5其他运算符new运算符new运算符用于创建新的类型实例,可以创建类类型、值类型、数组类型和委托类型。示例:
Classzhanghua=newPerson();intmyint=newint();string[]array=newstring[4];4.5其他运算符new运算符4.6标点符号标点符号是某些运算符的重要组成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大学生创业培训项目汇报表
- 2024幼儿中班父亲节活动方案
- 法律行业的展望
- 湖北省武汉市东西湖区2024-2025学年七年级上学期期末语文试题(解析版)
- 考研自习室申请书
- 护校队申请书范文
- 初级银行管理-银行专业初级《银行管理》押题密卷9
- 白瓷餐具项目风险评估报告
- 初级公司信贷-初级银行从业资格考试《公司信贷》高分通关卷1
- 医学院校考试题库 基础知识
- 复工复产六个一方案模板
- 全国各省(直辖市、自治区)市(自治州、地区)县(县级市)区名称一览表
- 报价单模板完
- 14S501-1 球墨铸铁单层井盖及踏步施工
- 《网店运营与管理》整本书电子教案全套教学教案
- [英语考试]同等学力英语新大纲全部词汇
- 2022年肝动脉化疗栓塞术(TACE)
- 形式发票格式2 INVOICE
- 平面图形的密铺
- 医师定期考核表(简易程序) 排版规范版本
- 采煤机验收表
评论
0/150
提交评论