《第三章 数据类型、运算符与表达式》由会员分享,可在线阅读,更多相关《第三章 数据类型、运算符与表达式(66页珍藏版)》请在金锄头文库上搜索。
1、第第3章章数据类型、运算符与表达式数据类型、运算符与表达式内容提要:内容提要:C#的主要数据类型以及类型标识符的主要数据类型以及类型标识符数据类型的转换数据类型的转换常量和变量、变量的赋值常量和变量、变量的赋值C#常用的运算符常用的运算符目的要求:目的要求:掌握掌握C#的主要数据类型、常量和变量、变量的赋值的主要数据类型、常量和变量、变量的赋值掌握掌握C#常用的各类运算符常用的各类运算符重点难点:重点难点:类型转换、常量和变量、算术运算符类型转换、常量和变量、算术运算符(+、-)、复合赋值运算、复合赋值运算符、逻辑运算符、条件运算符符、逻辑运算符、条件运算符n n【案例案例】简易计算器简易计算
2、器n本例将实现一个可以在窗口中输入本例将实现一个可以在窗口中输入两个操作数,并通过单击计算按钮进行两个操作数,并通过单击计算按钮进行计算的简易计算器程序,效果如图计算的简易计算器程序,效果如图2-1-1所示。所示。图图2-1-1 简易计算器简易计算器n在本例的实现过程中,将学习使用在本例的实现过程中,将学习使用基本数据类型进行简单计算,以及数据基本数据类型进行简单计算,以及数据类型的转换。案例的实现方法如下。类型的转换。案例的实现方法如下。n1创建项目创建项目n2界面设计界面设计n3代码编辑代码编辑3.1数据类型数据类型C#中数据类型主要分为两大类:值类型和引用类中数据类型主要分为两大类:值类
3、型和引用类型。这里我们先讲解这两种类型,然后再讨论数据类型。这里我们先讲解这两种类型,然后再讨论数据类型之间的转换。型之间的转换。3.1.1值类型值类型C#中值类型包括三种:简单类型、结构类型和枚中值类型包括三种:简单类型、结构类型和枚举类型。不同的类型是不同数据的集合,不同的类型举类型。不同的类型是不同数据的集合,不同的类型在在C#中用不同的类型标识符来表示。这里我们只介绍中用不同的类型标识符来表示。这里我们只介绍简单类型,结构类型和枚举类型将在后面介绍。简单类型,结构类型和枚举类型将在后面介绍。简单类型包括整数类型、浮点类型、小数类型、简单类型包括整数类型、浮点类型、小数类型、字符类型和布
4、尔类型等。字符类型和布尔类型等。1整数类型整数类型整整数数类类型型的的数数据据值值只只能能是是整整数数,计计算算机机语语言言所所提提供供的的数据类型有一定的范围。数据类型有一定的范围。类型标识符类型标识符类型标识符类型标识符描述描述描述描述可表示的数值范围可表示的数值范围可表示的数值范围可表示的数值范围sbytesbyte8 8位有符号整数位有符号整数位有符号整数位有符号整数-128+127-128+127bytebyte8 8位无符号整数位无符号整数位无符号整数位无符号整数02550255shortshort1616位有符号整数位有符号整数位有符号整数位有符号整数-32768+32767-3
5、2768+32767ushortushort1616位无符号整数位无符号整数位无符号整数位无符号整数 065535065535intint3232位有符号整数位有符号整数位有符号整数位有符号整数-2147483648+2147483647-2147483648+2147483647uintuint3232位无符号整数位无符号整数位无符号整数位无符号整数02023232-1-1longlong6464位有符号整数位有符号整数位有符号整数位有符号整数-9223372036854775805-9223372036854775805+9223372036854775807+92233720368547
6、75807ulongulong6464位无符号整数位无符号整数位无符号整数位无符号整数02026464-1-12.浮点类型浮点类型浮点类型的数据包含两种:浮点类型的数据包含两种:单精度浮点型(单精度浮点型(float)和)和双精度浮点型(双精度浮点型(double),),其区别在于取值范围和精度的其区别在于取值范围和精度的不同。不同。float类型是类型是32位宽,位宽,double类型是类型是64位宽。位宽。单精度:取值范围在单精度:取值范围在+1.510-453.41038之间,精度为之间,精度为7位数。位数。双精度:取值范围为双精度:取值范围为+5.0-3241.710308之间,精度为
7、之间,精度为1516位数。位数。3小数类型小数类型小小数数类类型型(decimal)占占用用16个个字字节节(128位位),主主要要为为了了满足需要高精度的财务和金融计算机领域。满足需要高精度的财务和金融计算机领域。小数类型数据的取值范围和精度如下:小数类型数据的取值范围和精度如下:取值范围在取值范围在+1.010-287.91028之间,精度为之间,精度为29位数。位数。注注意意:小小数数类类型型数数据据的的后后面面必必须须跟跟m或或者者M后后缀缀来来表表示示它它是是decimal类类型型的的,如如3.14m、0.28m等等,否否则则就就会会被被解解释释成成标标准准的浮点类型数据,导致数据类
8、型不匹配。的浮点类型数据,导致数据类型不匹配。例:例:138f代表代表float类型的数值类型的数值138.0518u代表代表uint类型的数值类型的数值51836897123ul代表代表ulong类型的数值类型的数值3689712322.1m代表代表decimal类型的数值类型的数值22.112.68代表代表double类型的数值类型的数值12.6836代表代表int类型的数值类型的数值36刚刚开开始始学学习习,不不可可能能一一下下子子掌掌握握这这么么多多数数值值类类型型,先先牢牢记以下几种:记以下几种:int型型:凡是要表示带符号的整数时,先考虑使用:凡是要表示带符号的整数时,先考虑使用i
9、nt型;型;uint型型:凡是需要不带符号的整数时,先考虑使用:凡是需要不带符号的整数时,先考虑使用uint型;型;double型:凡是需要做科学计算,并且精度要求不是很高型:凡是需要做科学计算,并且精度要求不是很高时,考虑使用时,考虑使用double型。型。4.字符类型字符类型字符类型的类型标识符是字符类型的类型标识符是char,采用采用Unicode字符集。字符集。凡是在单引号中的一个字符,就是一个字符常数,凡是在单引号中的一个字符,就是一个字符常数,如:如:你你、A、?、6、2注注意意:在在表表示示一一个个字字符符常常数数时时,单单引引号号内内的的有有效效字字符符数数量量必必须须且且只只
10、能能是是一一个个,并并且且不不能能是是单单引引号号或或者者反反斜斜杠杠()。)。为为了了表表示示单单引引号号和和反反斜斜杠杠等等特特殊殊的的字字符符常常数数,C#提提供了转义符。供了转义符。转义符转义符字符名称字符名称单引号单引号双引号双引号反斜杠反斜杠0空字符(空字符(Null)a发出一个警告发出一个警告b倒退一个字符倒退一个字符f换页换页n新的一行新的一行r换行并移到同一行的最前面换行并移到同一行的最前面t水平方向的水平方向的Tabv垂直方向的垂直方向的TabC#常用的转义符常用的转义符5布尔类型布尔类型布尔类型的类型标识符是布尔类型的类型标识符是bool。布布尔尔类类型型常常数数只只有有
11、两两种种值值:true(代代表表“真真”)和和false(代表代表“假假”)。)。布尔类型数据主要应用在流程控制中。布尔类型数据主要应用在流程控制中。例:例:boolb=53;/b的值为的值为true;b=false;3.1.2引用类型引用类型1.object类类object类类是是系系统统提提供供的的基基类类型型,是是所所有有类类型型的的基基类类,C#中中所有的类型都直接或间接派生于对象类型。所有的类型都直接或间接派生于对象类型。对于任一个对于任一个object变量,均可以赋以任何类型的值。变量,均可以赋以任何类型的值。doubled=3.14;objectobj1;obj1=d;obj1=
12、k;对于对于object类型的变量,声明必须使用类型的变量,声明必须使用object关键字。关键字。2.string类类一个字符串是被双引号包含的一系列字符。一个字符串是被双引号包含的一系列字符。string类是专门用于对字符串进行操作的。类是专门用于对字符串进行操作的。如:如:stringstr1=中国,;中国,;stringstr2=你好!;你好!;stringstr3=str1+str2;/这相当于这相当于str3=中国,你好!中国,你好!charc=str30;/取出取出str3的第一个字符,即的第一个字符,即“中中”字。字。C#支持两种形式的字符串常数。支持两种形式的字符串常数。(1
13、)常规字符串常数)常规字符串常数如:如:“thisisatest”“C#程序设计教程程序设计教程”例:例:usingSystem;classStringDemopublicstaticvoidMain()stringstr1=“Astring”;stringstr2=Anotherstring.;Console.WriteLine(“0n1”,str1,str2);运行结果如下:运行结果如下:(2)逐字字符串常数)逐字字符串常数逐逐字字字字符符串串常常数数以以开开头头,后后跟跟一一对对双双引引号号,在在双双引引号号中放入字符。如:中放入字符。如:“电子高专电子高专”“Thisisabook.”
14、逐字字符串常数同常规字符串常数的区别逐字字符串常数同常规字符串常数的区别:在在逐逐字字字字符符串串常常数数的的双双引引号号中中,每每个个字字符符都都代代表表其其最最原始的意义,在逐字字符串常数中没有转义字符。原始的意义,在逐字字符串常数中没有转义字符。注注意意:如如果果要要包包含含双双引引号号(),就就必必须须在在一一行行中中使使用用两个双引号()。两个双引号()。stringstr1;/定义字符串类型定义字符串类型stringstr2= hello,world ;/规则字符串常数:规则字符串常数:hello,worldstringstr3= hello,world ;/逐字字符串常数:逐字字
15、符串常数:hello,worldstringstr4= hellotworld ;/helloworldstringstr5= hellotworld ;/hellotworldstringstr6=“Hesaid Hello toyou ;/Tomsaid Hello toyoustringstr7=“HesaidHellotoyou ;/Tomsaid Hello toyou3.1.3类型转换类型转换数据类型在一定条件下是可以相互转换的。数据类型在一定条件下是可以相互转换的。C#允许使用两种转换的方式:隐式转换和显式转换。允许使用两种转换的方式:隐式转换和显式转换。1.隐式转换隐式转换隐式
16、转换是系统默认的、不需要加以声明就可以进行的隐式转换是系统默认的、不需要加以声明就可以进行的转换。这种转换一般是转换。这种转换一般是“向上向上”的,即由占存储空间小的的,即由占存储空间小的数据类型向占存储空间大的数据类型转换。数据类型向占存储空间大的数据类型转换。隐式数据转换的使用方法如下:隐式数据转换的使用方法如下:inti=518;/a为整型数据为整型数据longb=i;/b为长整型数据为长整型数据floatf=i;/f为单精度浮点型数据为单精度浮点型数据2显式转换显式转换显式转换又叫显式转换又叫强制类型转换强制类型转换,显式转换要明确指定转换类型。,显式转换要明确指定转换类型。显式转换格
17、式:显式转换格式:(类型标识符类型标识符)表达式表达式意义为:意义为:将表达式的值的类型转换为类型标识符的类型。将表达式的值的类型转换为类型标识符的类型。比如:比如:(char)65/把把int类型的类型的65转换成转换成char类型类型注意:注意:(1)显式转换可能会导致错误。)显式转换可能会导致错误。(2)对于将)对于将float,double,decimal转换为整数,将通过舍转换为整数,将通过舍入得到最接近的整型值,如果这个整型值超出目标入得到最接近的整型值,如果这个整型值超出目标域,则出现转换异常。域,则出现转换异常。比如:比如:(int)6.28m/转换的结果为转换的结果为6(in
18、t)3e25f/将产生溢出错误将产生溢出错误3System.Convert类类n System.ConvertSystem.Convert类位于命名空间类位于命名空间SystemSystem,它为,它为数据转换提供了一整套方法,可以将一个基本数据数据转换提供了一整套方法,可以将一个基本数据类型转换为另一个基本数据类型。类型转换为另一个基本数据类型。使用使用Convert类类的方法可以方便地执行显示、隐式数据类型转换的的方法可以方便地执行显示、隐式数据类型转换的功能,以及不相关数据类型的转换。功能,以及不相关数据类型的转换。nToBoolean、ToByte、ToChar、ToDateTime、
19、ToDecimal、ToDouble、ToInt16、ToInt32、ToInt64、ToSingle、ToString、ToSByte、ToUint16、ToUint32、ToUint64n nChar c=a;Char c=a;n nInt a=Convert.ToInt16(c);Int a=Convert.ToInt16(c);n nstring s=string s=Convert.ToString(aConvert.ToString(a); );n ns=s+”5”;s=s+”5”;n nfloat f3=float f3=Convert.ToSingle(sConvert.ToS
20、ingle(s); );3.2.1常量常量在在C#中中,常常量量在在程程序序的的运运行行过过程程中中其其值值是是不不能能改改变变的的,例例如如,数数字字100就就是是一一个个常常量量,这这样样的的常常量量一一般般被被称称作常数。作常数。声明常量的格式:声明常量的格式:const类型标识符类型标识符常量名常量名=表达式;表达式;例:例:constdoublePI=3.14159265;doubler=5.2;doubles=PI*r*r;Console.Write(“面积面积=0”,s);3.2常量与变量常量与变量常量特点:常量特点:l l在程序中,常量只能被赋予初始值。在程序中,常量只能被赋予
21、初始值。l l定定义义常常量量时时,表表达达式式中中的的运运算算符符对对象象只只允允许许出出现现常常量量和和常数,不能有变量存在。常数,不能有变量存在。例如:例如:intb=18;constinta=26;constintk=b+10;/错误,表达式中不允许出现变量错误,表达式中不允许出现变量constintd=a+23;/正确,因为正确,因为a是常量是常量a=56;/错误,不能修改常量的值错误,不能修改常量的值3.2.2变量变量变量是程序运行过程中用于存放数据的变量是程序运行过程中用于存放数据的存储单元存储单元。变量的值在程序的运行过程中可以改变。变量的值在程序的运行过程中可以改变。1变量的
22、定义变量的定义在在定定义义变变量量时时,首首先先必必须须给给每每一一个个变变量量起起名名,称称为为变变量量名名,变量名代表变量名代表存储地址存储地址。变量的类型决定了存储在变量中的数值的类型。变量的类型决定了存储在变量中的数值的类型。变量定义格式:变量定义格式:类型标识符类型标识符变量名变量名1,变量名,变量名2,例:例:doublefsum;stringstrName;charb;intx;注意:注意:C#规定,任何变量在使用前,必须先定义,规定,任何变量在使用前,必须先定义,后使用。后使用。2变量的赋值变量的赋值变变量量的的赋赋值值,就就是是将将数数据据保保存存到到变变量量所所代代表表的的
23、存存储储单单元元中的过程。中的过程。格式:格式:变量名变量名=表达式;表达式;意义:计算表达式的值,然后将这个值赋予变量。意义:计算表达式的值,然后将这个值赋予变量。例例:doublenAverage;intnAgeSum;nAgeSum=210;/给给nAgeSum变量赋予数值变量赋予数值210在程序中,可以给一个变量多次赋值。变量的当值等在程序中,可以给一个变量多次赋值。变量的当值等于于最近一次最近一次给变量所赋的值。给变量所赋的值。如:如:nAgeSum=68;/这时这时nAgeSum等于等于68nAgeSum=36+24;/这时这时nAgeSum等于等于60nAgeSum=nAgeSu
24、m+40;/这这时这这时nAgeSum等于等于100在在对对变变量量进进行行赋赋值值时时,表表达达式式的的值值的的类类型型必必须须同同变变量量的类型的类型相同相同。stringsName;intnScore;sName=Jack;/正确正确sName=Tom;/正确正确nScore=98;sName=5;/错错误误,不不能能将将整整数数赋赋予予字字符符串串对对象象nScore=Hello;/错误错误,不能字符串赋予整型变量不能字符串赋予整型变量在在定定义义变变量量的的同同时时,可可以以对对变变量量赋赋值值,称称为为变变量量的初始化。的初始化。对变量进行初始化的格式如下:对变量进行初始化的格式如
25、下:类型标识符类型标识符变量名变量名=表达式;表达式;例:例:stringstr=“Thisisabook”;3变量的初始化变量的初始化练习:练习:判断题:判断题:1.C#规定所有变量必须先声明后使用。(规定所有变量必须先声明后使用。()2双精度浮点数类型双精度浮点数类型double由由8个字节组成。个字节组成。()3.执行执行constinta=10;a=a+1;这两条语句后这两条语句后,a的值为的值为11。()填空题:填空题:1使用变量使用变量a存放数据存放数据-389,则将变量声明为(,则将变量声明为()类型)类型最合适。最合适。3.3 运算符和表达式运算符和表达式3.3.1运算符运算符
26、运算符是表示各种不同运算的符号。运算符是表示各种不同运算的符号。1算术运算符算术运算符算算术术运运算算符符用用于于对对操操作作数数进进行行算算术术运运算算。C#的的算算术术运运算算符符同数学中的算术运算符是很相似的。同数学中的算术运算符是很相似的。表表C#算术运算符算术运算符运算符运算符运算符运算符意义意义意义意义运算对象数目运算对象数目运算对象数目运算对象数目运算对象类型运算对象类型运算对象类型运算对象类型运算结果类运算结果类运算结果类运算结果类型型型型实例实例实例实例+ +取正或加取正或加取正或加取正或加法法法法1 1或或或或2 2任何数值类型任何数值类型任何数值类型任何数值类型数值类型数
27、值类型数值类型数值类型+5+5、6+8+a6+8+a取负或减取负或减取负或减取负或减法法法法1 1或或或或2 23 3、a-ba-b* *乘法乘法乘法乘法2 23*a*b3*a*b、5*25*2/ /除法除法除法除法2 27/47/4、a/ba/b%模(求整模(求整模(求整模(求整数除法的数除法的数除法的数除法的余数,如余数,如余数,如余数,如7 7除以除以除以除以3 3的余的余的余的余数为数为数为数为2 2,则,则,则,则7%37%3等于等于等于等于2 2)2 2a%(2+5)a%(2+5)、a%ba%b、3%23%2+自增运算自增运算自增运算自增运算1 1a+a+、+b+b- -自减运算自
28、减运算自减运算自减运算1 1a-a-、-b-b例:例:usingSystem;classModDemostaticvoidMain()intiresult,irem;doubledreult,drem;iresult=10/3;irem=10%3;dresult=10.0/3.0;drem=10.0%3.0;Console.WriteLine(10/3=0t 10%3=1, iresult, irem); Console.WriteLine(10.0/3.0=0t10.0%3.0=1,dresult,drem);程序的输出如下所示:程序的输出如下所示:10/3=310%3=110.0/3.0=
29、3.3333333333333310.0%3.0=1特殊的算术运算符:特殊的算术运算符:+(自增运算符自增运算符)-(自减速运算符自减速运算符)作用:作用:使变量的值自动增加使变量的值自动增加1或者减少或者减少1。例如,例如,x=x+1;可以被写成可以被写成+x;/前缀格式前缀格式或者或者x+;/后缀格式后缀格式例:例:x=8;y=+x;在这种情况下,在这种情况下,x和和y被赋值为被赋值为9。但是,如果代码如下所写:但是,如果代码如下所写:x=8;y=x+;那么那么y被赋值为被赋值为8,x被赋值为被赋值为9。当一个自增或自减运算符在它的操作数前面时,当一个自增或自减运算符在它的操作数前面时,C
30、#将在取将在取得操作数的值前执行自增或自减操作。得操作数的值前执行自增或自减操作。如果运算符在操作数的后面,如果运算符在操作数的后面,C#将先取得操作数的值,然将先取得操作数的值,然后进行自增或自减运算。后进行自增或自减运算。例:例:usingSystem;classTeststaticvoidMain()intx=5;inty=x-;Console.WriteLine(y=0,y);y=-x;Console.WriteLine(y=0,y);结果:结果:y=5y=3注意:注意:+、-只能用变量,而不能用于常量或表达式,例如只能用变量,而不能用于常量或表达式,例如5+或或-(x+y)都是错误的
31、。都是错误的。例:例:usingSystem;classcountstaticvoidMain()intVal1=2;intVal2=3;Console.WriteLine(“Val1*Val2=0”,Val1*Val2);Console.WriteLine(“Val1/Val2=0”,Val1/Val2);Console.WriteLine(“Val1%Val2=0”,Val1%Val2);Console.WriteLine(+Val1);Console.WriteLine(-Val2);Console.WriteLine(Val1+);Console.WriteLine(Val2-);结果
32、:结果:2赋值运算符赋值运算符赋值运算符用于将一个数据赋予一个变量,赋值操作符的赋值运算符用于将一个数据赋予一个变量,赋值操作符的左操作数必须是一个变量,赋值结果是将一个新的数值存放在左操作数必须是一个变量,赋值结果是将一个新的数值存放在变量所指示的内存空间中。变量所指示的内存空间中。例如例如:intx=8;x=x+x;x=16-x;表表C#的赋值运算符的赋值运算符类类类类型型型型符符符符 号号号号说说说说明明明明简单赋值运算符简单赋值运算符简单赋值运算符简单赋值运算符= =x=1x=1复合赋值运算符复合赋值运算符复合赋值运算符复合赋值运算符+=+=x+=1x+=1等价于等价于等价于等价于x=
33、x+1x=x+1-=-=x-=1x-=1等价于等价于等价于等价于x=x-1x=x-1* *=1=1x*=1x*=1等价于等价于等价于等价于x=x*1x=x*1/=/=x/=1x/=1等价于等价于等价于等价于x=x/1x=x/1%=%=x%=1x%=1等价于等价于等价于等价于x=x%1x=x%1可可以以把把表表达达式式的的值值通通过过复复合合赋赋值值运运算算符符赋赋予予变变量量,这这时复合赋值运算时复合赋值运算右边的表达式右边的表达式是作为一个是作为一个整体整体参加运算的。参加运算的。例例:inta=8,b=3;a%=b*2-5;/*相当于相当于a%=(b*2-5),它与它与a=a%(b*2-5
34、)是等价的。是等价的。*/对变量可以进行连续赋值。对变量可以进行连续赋值。例例:int z=3;x=y=z; /等价于等价于x=(y=z)。3.关系运算符关系运算符关关系系运运算算符符用用于于比比较较两两个个值值的的大大小小,关关系系运运算算的的结结果果不不是是true就是就是false。例:例:boola=a5-2/a的值为的值为false表表C#的关系运算符的关系运算符符号符号符号符号意义意义意义意义运算结果类型运算结果类型运算结果类型运算结果类型运算对象个数运算对象个数运算对象个数运算对象个数实例实例实例实例 大于大于大于大于布尔型。如果条布尔型。如果条布尔型。如果条布尔型。如果条件成立
35、,结果为件成立,结果为件成立,结果为件成立,结果为truetrue,否则结果为,否则结果为,否则结果为,否则结果为falsefalse2 236,x2,ba36,x2,ba 小于小于小于小于3.143,xy3.143,x=大于等于大于等于大于等于大于等于3.26=b3.26=b=小于等于小于等于小于等于小于等于PI=3.1416PIj)!(ij)&逻辑与逻辑与逻辑与逻辑与2 2xxy&xy&x00| |逻辑或逻辑或逻辑或逻辑或2 2xxy|xy|x00表表C#的逻辑运算符的逻辑运算符当当需需要要多多个个判判定定条条件件时时,可可以以很很方方便便地地使使用用逻逻辑辑运运算算符将关系表达式连接起来
36、。符将关系表达式连接起来。例例:xy&x0如如果果表表达达式式中中同同时时存存在在着着多多个个逻逻辑辑运运算算符符,逻逻辑辑非非的的优先级最高,逻辑与的优先级高于逻辑或。优先级最高,逻辑与的优先级高于逻辑或。例例:32|!(5-36)&ab5.位运算符位运算符(1)“”运算符运算符把二进制数的把二进制数的0转换为转换为1,1转换为转换为0。例:例:6的二进制表示:的二进制表示:000001106的结果:的结果:11111001(2)“&”运算符运算符0&0=00&1=01&0=01&1=1例:例:7的二进制表示:的二进制表示:0000011111的二进制表示:的二进制表示:00001011“&
37、”运算的结果是:运算的结果是:00000011即:即:7&11=3(3)“|”运算符运算符0|0=00|1=11|0=11|1=1例:例:7的二进制表示:的二进制表示:0000011111的二进制表示:的二进制表示:00001011“|”运算的结果是:运算的结果是:00001111即:即:7&11=15(4)“”运算符运算符00=001=110=111=0例:例:7的二进制表示:的二进制表示:0000011111的二进制表示:的二进制表示:00001011“”运算的结果是:运算的结果是:00001100即:即:711=12(5)“”运算符运算符二进制位全部二进制位全部按位左移按位左移,高位高位
38、被被丢弃丢弃,低位低位顺序顺序补补0。例:例:7的二进制表示:的二进制表示:000001117”运算符运算符二进制位全部二进制位全部按位右移按位右移。例:例:7的二进制表示:的二进制表示:0000011171结果是结果是00000011(十进制是(十进制是3)6.条件运算符条件运算符格式:格式:操作数操作数1?操作数操作数2:操作数操作数3含含义义:进进行行条条件件运运算算时时,首首先先判判断断问问号号前前面面的的布布尔尔值值是是true还还是是false,如如果果是是true,则则值值等等于于操操作作数数2的的值值;如果为如果为false,则值等于则值等于操作数操作数3的值的值。例例如如:条
39、条件件表表达达式式“68?15+a:39”,由由于于68的的值值为为false,所以整个表达式的所以整个表达式的值是值是39。7.其他运算符其他运算符(1)字符串连接符(字符串连接符(+)就是将两个字符就是将两个字符串连接在一起串连接在一起,形成新的字符串。,形成新的字符串。比如:比如:“abc”+“efg” /结果是结果是abcefg“36812”+“3.14” / 结果是结果是368123.14(2)is运算符运算符 is运运算算符符用用于于检检查查表表达达式式是是否否指指定定的的类类型型,如如果果是是,结结果果为为true,否则结果为否则结果为false。例如:例如: int k=2;
40、bool isTest=k is int; /isTest=true (3)sizeof运算符运算符 sizeof运算符用于获得值类型数据在运算符用于获得值类型数据在内存占用的字节数内存占用的字节数。例如:例如: int a=sizeof(double); /a=8 3.3.2表达式表达式表达式是运算符、常量和变量等组成的符号序列。表达式是运算符、常量和变量等组成的符号序列。1算术表达式算术表达式算算术术表表达达式式是是用用算算术术运运算算符符将将运运算算对对象象连连接接起起来来的的符符合合语法规则的式子。语法规则的式子。自自增增运运算算符符和和自自减减运运算算符符的的优优先先级级别别高高于于
41、其其他他的的算算术术运运算符。算符。例例如如表表达达式式8+x+,应应看看作作8+(x+)。如如果果x的的原原值值是是6,则表达式则表达式8+x+的值是的值是14,运算结束后,运算结束后x的值是的值是7。2赋值表达式赋值表达式由由赋赋值值运运算算符符将将变变量量和和表表达达式式连连接接起起来来的的式式子子称称为为赋赋值表达式。值表达式。例如:例如:y=x=8*8+3这这个个赋赋值值表表达达式式的的值值是是67。由由于于赋赋值值运运算算符符的的结结合合性性是自右至左的,所以是自右至左的,所以y=x=8*8+3和和y=(x=8*8+3)是等价的。是等价的。3关系表达式关系表达式用用关关系系运运算算
42、符符将将两两个个表表达达式式连连接接起起来来的的式式子子称称为为关关系系表表达达式式。关关系系表表达达式式的的值值是是布布尔尔类类型型,即即真真(true)或或假假(false)。例如:例如:x=8;y=6;z=xy+3;/结果为结果为falsea=xy&z;/结果为结果为false4逻辑表达式逻辑表达式用用逻逻辑辑运运算算符符将将关关系系表表达达式式或或者者逻逻辑辑值值连连接接起起来来的的式式子称为逻辑表达式。逻辑表达式的值只能取子称为逻辑表达式。逻辑表达式的值只能取true或或false。三三个个逻逻辑辑运运算算符符的的运运算算顺顺序序为为“逻逻辑辑非非”最最高高,其其次次是是“逻辑与逻辑
43、与”,最后为,最后为“逻辑或逻辑或”。例如:例如:!(36)|(5=9)|(7=1)/结果为结果为true5条件表达式条件表达式由条件运算符和表达式组成的式子称为条件表达式。由条件运算符和表达式组成的式子称为条件表达式。例如:例如:83?5:2;其结果为其结果为5,因为,因为83为为true,则整个表达式的值为,则整个表达式的值为“:”前前面表达式的值,这里是常数面表达式的值,这里是常数5。6、多种运算符组成的表达式的运算、多种运算符组成的表达式的运算在对包含多种运算符表达式求值时,有括号,先计算括号里在对包含多种运算符表达式求值时,有括号,先计算括号里的,按各运算符执行的先后级别和结合性确定
44、,先执行优先级的,按各运算符执行的先后级别和结合性确定,先执行优先级别高的,再执行优先级别低的。如书别高的,再执行优先级别低的。如书p50。练习:练习:判断题判断题:1.已知已知a=3,b=4,则则+(a+b)的结果为的结果为8。()2.整数除法会产生一个整数商,其小数部分会被舍去。(整数除法会产生一个整数商,其小数部分会被舍去。()3.若变量若变量a为整型,则表达式为整型,则表达式“aisint”的结果为的结果为true。()选择题选择题1.已知已知inta;stringb=”123”;boolc;则有错误的表达式为(则有错误的表达式为()Aa=10&cBc120C2*a+1Db+”456”
45、2表达式表达式“abcde”=”abcde”+”2006”的值为(的值为()ATrue2006BtrueCfalseD0读程序,写结果:读程序,写结果:1.usingSystem;ClassDemostaticvoidMain()doublex=10.0,y=3.0;byteb;inti;charch;i=(int)(x/y);Console.WriteLine(“(int)(x/y)=0”,i);i=100;b=(byte)i;Console.WriteLine(“b=0”,b);i=257;b=(byte)i;Console.WriteLine(“b=0”,b);b=66;ch=(char
46、)b;Console.WriteLine(“ch=0”,ch);结果:结果:2.usingSystem;classLogicalOperatorstaticvoidMain()inti=1;intj=2;boolk1,k2,k3;k1=ij&i+j;Console.WriteLine(“k1=0,i=1”,k1,i);k2=ij|i+j;Console.WriteLine(“k2=0,i=1”,k2,i);boolk3=ij+|xy&!true;Console.WriteLine(“k3=0,i=1”,k3,j);结果:结果:3.usingSystem;classDemo3staticvoidMain()inta=10,b=20,c;boolk1,k2,k3;k1=aisint;k2=a=b;c=k1?a+:-b;k3=k1|k2&!k1;Console.WriteLine(k1=0k2=1k3=2,k1,k2,k3);Console.WriteLine(a=0b=1c=2,a,b,c);bytet1=150,t2=110,t3;Console.WriteLine(t3);结果:结果:本章作业:本章作业: 1.习题习题3的的1、2、3、4。实验报告:实验报告: 实验二实验二