C#数据类型

上传人:仙*** 文档编号:243022691 上传时间:2024-09-14 格式:PPT 页数:59 大小:470KB
返回 下载 相关 举报
C#数据类型_第1页
第1页 / 共59页
C#数据类型_第2页
第2页 / 共59页
C#数据类型_第3页
第3页 / 共59页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,3,章,数据类型、运算符与表达式,3.1,数据类型,C#,中数据类型主要分为两大类:值类型和引用类型。,3.1.1,值类型,C#,中值类型包括,3,种:简单类型、结构类型和枚举类型。,简单类型包括整数类型、浮点类型、小数类型和布尔类型等。,1.,整数类型,整数类型的数据值只能是整数。数学上的整数可以是负无穷大到正无穷大,但计算机的存储单元是有限的,因此计算机语言所提供的数据类型都是有一定范围的。,C#,中提供了,8,种整数类型,它们的取值范围如下表所示。,类型标识符,描述,可表示的数值范围,sbyte,8,位有符号整数,-128 +127,byte,8,位无符号整数,0 255,short,16,位有符号整数,-32768 +32767,ushort,16,位无符号整数,0 65535,int,32,位有符号整数,-2147483648 +2147483647,uint,32,位无符号整数,0 2,32,-1,long,64,位有符号整数,-9223372036854775805 +9223372036854775807,ulong,64,位无符号整数,0 2,64,-1,2.,浮点类型,小数在,C#,中采用浮点类型的数据来表示,浮点类型的数据包含两种:,单精度浮点型(,float,),和双精度浮点型(,double,),,其区别在于取值范围和精度的不同。计算机对浮点数据的运算速度大大低于对整数的运算速度,数据的精度越高对计算机的资源要求越高,因此在对精度要求不高的情况下,我们可以采用单精度类型,而在精度要求较高的情况下可以使用双精度类型。,float,类型是,32,位宽,,double,类型是,64,位宽。,浮点类型数据的精度和可接受的值范围如下:,单精度:取值范围在,+,1.510,-45, 3.410,38,之间,精度为,7,位数。,双精度:取值范围为,+,5.0,-324, 1.710,308,之间,精度为,1516,位,数。,3, 小数类型,小数类型,(,decimal,),类型数据是高精度的类型数据,占用,16,个字节(,128,位,),主要为了满足需要高精度的财务和金融计算机领域。小数类型数据的取值范围和精度如下:,小数类型:取值范围在,+,1.010,-28, 7.910,28,之间,精度为,29,位数。,小数类型数据的范围远远小于浮点型,不过它的精确度比浮点型高得多。所以相同的数字对于两种类型来说可能表达的内容并不相同。,值得注意的是,小数类型数据的后面必须跟,m,或者,M,后缀来表示它是,decimal,类型的,如,3.14m,、,0.28m,等,否则就会被解释成标准的浮点类型数据,导致数据类型不匹配。,在程序中书写一个十进制的数值常数时,,C#,默认按照如下方法判断一个数值常数据属于哪种,C#,数值类型:,l,如果一个数值常数不带小数点,如,12345,,则这个常的类型是整型。,l,对于一个属于整型的数值常数,,C#,按如下顺序判断该数的类型:,int,,,uint,,,long,,,ulong,。,l,如果一个数值常数带小数点,如,3.14,,则该常数的类型是浮点型中的,double,类型。,如果不希望,C#,使用上述默认的方式来判断一个十进制数值常数的类型,可能通过给数值常数加后缀的方法来指定数值常数的类型。可以使用的数值常数后缀有以下几种:,l,u(,或者,U),后缀:加在整型常数后面,代表该常数是,uint,类型或者,ulong,类型。具体是其中的哪一种,由常数的实际值决定。,C#,优先匹配,uint,类型。,l,l(,或者,L),后缀:加在整型常数后面,代表该常数是,long,类型或者,ulong,类型。具体是其中的哪一种,由常数的实际值决定。,C#,优先匹配,long,类型。,l,ul,后缀:加在整型常数后面,代表该常数是,ulong,类型。,l,f(,或者,F),后缀:加在任何一种数值常数后面,代表该常数是,float,类型。,l,d(,或者,D),后缀:加在任何一种数值常数后面,代表该常数是,double,类型。,l,m(,或者,M),后缀:加在任何一种数值常数后面,代表该常数是,decimal,类型。,举例如下:,138f,代表,float,类型的数值,138.0,518u,代表,uint,类型的数值,518,36897123ul,代表,ulong,类型的数值,36897123,22.1m,代表,decimal,类型的数值,22.1,12.68,代表,double,类型的数值,12.68,36,代表,int,类型的数值,36,如果一个数值常数超过了该数值常数的类型的所能表示的范围,,C#,在对程序进行编译时,将给出错误信息。,刚开始学习,不可能一下子掌握这么多数值类型,先牢记以下几种:,int,型 :凡是要表示带符号的整数时,先考虑使用,int,型;,uint,型 :凡是需要不带符号的整数时,先考虑使用,uint,型;,double,型:凡是需要做科学计算,并且精度要求不是很高,时,考虑使用,double,型。,4.,字符类型,C#,提供的字符类型数据按照国际上公认的标准,采用,Unicode,字符集。一个,Unicode,字符的长度为,16,位(,bit,),,它可以用来表示世界上大部分语言种类。所有,Unicode,字符的集合构成字符类型。字符类型的类型标识符是,char,,,因此也可称为,char,类型。,凡是在单引号中的一个字符,就是一个字符常数,如下所示:,a,、 ,p,、 *、 ,0,、,8,在表示一个字符常数时,单引号内的有效字符数量必须且只能是一个,并且不能是单引号或者反斜杠(,)。,为了表示单引号和反斜杠等特殊的字符常数,,C#,提供了转义符,在需要表示这些特殊常数的地方,可以使用这些转义符来替代字符。如下表所示。,转义符,字符名称,单引号,双引号,反斜杠,0,空字符(,Null,),a,发出一个警告,b,倒退一个字符,f,换页,n,新的一行,r,换行并移到同一行的最前面,t,水平方向的,Tab,v,垂直方向的,Tab,C#,常用的转义符,如,Console.WriteLine(“Hello,”+”+”,打印出单引号“,+”“);,例,: using System;,class,StrDemo,static void Main( ),Console.WriteLine(“FirstLinenSecondLine,”);,Console.WriteLine(“AtBtC,”);,Console.WriteLine(“DtEtF,”);,5,布尔类型,布尔类型数据用于表示逻辑真和逻辑假,布尔类型的类型标识符是,bool,。,布尔类型常数只有两种值:,true,(,代表“真”)和,false,(,代表“假”)。 布尔类型数据主要应用在流程控制中。程序员往往通过读取或设定布尔类型数据的方式来控制程序的执行方向。,3.1.2,引用类型,引用类型是,C#,中和值类型并列的类型,引用类型所存储的实际数据是当前引用值的地址,因此引用类型数据的值会随所指向的值的不同而变化,同一个数据也可以有多个引用。这与简单类型数据是不同的,简单类型数据存储的是自身的值,而引用类型存储的是将自身的值直接指向到某个对象的值。,C#,中引用类型数据有,4,种:类类型(,class-type,)、数组类型,(array-type),、接口类型(,interface-type,)和委托类型,(delegate-type),。,1. object,类,object,类是系统提供的基类型,是所有类型的基类,,C#,中所有的类型都直接或间接派生于对象类型。因此,对于任一个,object,变量,均可以赋以任何类型的值。,int,a=8;,object obj1;,obj1=x;,object obj2=,x,;,对于,object,类型的变量,声明必须使用,object,关键字。,2.string,类,一个字符串是被双引号包含的一系列字符。例如,“,how are you!”,就是一个字符串。,string,类是专门用于对字符串进行操作的。,字符串在实际应用中非常广泛,字符串之间的运算也是非常方便的。如:,string str1=,中国,;,string str2=,你好!;,string str3=str1+str2; /,这相当于,str3=,中国,你好!,char c=str30; /,取出,str3,的第一个字符,即“中”字。,C#,支持以下两种形式的字符串常数。,(,1,)常规字符串常数,放在双引号间的一串字符,就是一个常规字符串常数,比如:,“,this is a test”,“C#,程序设计教程”,除了普通的字符,一个字符串常数也能包含一个或多个前面描述的转义符。例如,看看下面的程序,它使用了转义符。,例:,/,转义符在字符串中的使用示范,using System;,class,StrDemo,static void Main( ),Console.WriteLine(,First0linenSecond0line,);,Console.WriteLine,(,你好,a,);,Console.WriteLine(,“1,t2t3,);,Console.WriteLine,(“*t*,t,*”);,例,:,using System;,class,StringDemo,public static void Main( ),string str1=“A string”;,string str2=Another string.;,Console.WriteLine(“0n1”,str1,str2);,运行结果如下:,(,2,)逐字字符串常数,逐字字符串常数以,开头,后跟一对双引号,在双引号中放入字符。如:,“,计算机”,“How are you!”,逐字字符串常数同常规字符串常数的区别在于,在逐字字符串常数的双引号中,每个字符都代表其最原始的意义,在逐字字符串常数中没有转义字符。也就是说,逐字字符串常数双引号内的内容在被接受时是不变的,并且可以跨越多行。唯一的例外是,如果要包含双引号(),就必须在一行中使用两个双引号()。,string str1; /,定义字符串类型,string str2=,hello, world,; /,规则字符串常数:,hello, world,string str3=,hello, world,; /,逐字字符串常数:,hello, world,string str4=,hello t world,; /hello world,string str5=,hello t world,; /hello t world,string str6=,“,He said,Hello ,to you,; /Tom said,Hello,to you,string str7=,“,He said,Hello,to you,; /Tom said,Hello,to you,简单来说,规则字符串要对字符串中的转义符进行解释,而逐字字符串除了对双引号进行解释外,对其他字符,用户定义成什么样,显示结果就是什么样。,例:,/,逐字字符串常数实例,using System;,class Test,static void Main( ),Console.WriteLine(,This,is a verbatim,string literal,that spans several lines.,);,Console.WriteLine(,Here,is some tabbed output:,1 2 3 4,5 6 7 8,);,Console.WriteLine(,Programmers,say,I like C#,);,运行结果如下:,3.1.3,类型转换,数据类型在一定条件下是可以相互转换的,如将,int,型数据转换成,double,型数据。,C#,允许使用两种转换的方式:隐式转换(,implicit conversions,)和显式转换(,explicit conversions,)。,1.,隐式转换,隐式转换是系统默认的、不需要加以声明就可以进行的转换。在隐式转换过程中,编译器不需要对转换进行详细的检查就能安全地执行转换,例如数据从,int,类型到,long,类型的转换。,隐式数据转换的使用方法如下:,int,a=8; /a,为整型数据,long b=a; /b,为长整型数据,float c=a; /c,为单精度浮点型数据,2,显式转换,显式转换又叫强制类型转换,与隐式转换相反,显式转换需要用户明确地指定转换类型,一般在不存在该类型的隐式转换的时候才使用。,显式转换可以将一数值类型强制转换成另一种数值类型,格式如下:,(类型标识符)表达式,意义为:将表达式的值的类型转换为类型标识符的类型。比如:,(,int,),3.14 /,把,double,类型的,3.14,转换成,int,类型,需要提醒注意以下几点:,(,1,)显式转换可能会导致错误。进行这种转换时编译器将对转换进行溢出检测。如果有溢出说明转换失败,就表明源类型不是一个合法的目标类型。转换当然无法进行。,(,2,)对于从,float,,,double, decimal,到整型数据的转换,将通过舍入得到最接近的整型值,如果这个整型值超出目标域,则出现转换异常。,比如:,(,int,),6.28m,转换的结果为,6,。,而如果将,float,的数据,3e25,转换成整数,语句如下:,(,int,) 3e25f,则将产生溢出错误,因为,3e25,超过了,int,类型所能表示的范围。,3.1.4,装箱和拆箱,装箱(,boxing,),和拆箱,(,unboxing,),是,C#,类型系统中重要的概念。它允许将任何类型的数据转换为对象,同时也允许任何类型的对象转换到与之兼容的数据类型,其实拆箱是装箱的逆过程。,1,装箱转换,装箱转换是指将一个值类型的数据隐式地转换成一个对象类型(,object,),的数据。把一个值类型装箱,就是创建一个,object,类型的实例,并把该值类型的值复制给该这个,object,。,例如:下面的两条语句就执行了装箱转换:,int,k=100;,object,obj,=k;,上面的两条语句中,第,1,条语句先声明一个整型变量,k,并对其赋值,第,2,条语句则先创建一个,object,类型的实例,obj,,,然后将,k,的值复制给,obj,。,在执行装箱转换时,也可以使用显式转换,如:,int,k=100;,object,obj,=(object) k;,例:在程序中执行装箱转换,程序代码如下:,using System;,class,BoxingDemo, static void Main( ),Console.WriteLine,(,执行装箱转换:,),;,int,k=200;,object,obj,=k;,k=300;,Console.WriteLine(,obj,=0,obj);,Console.WriteLine(,k,=0, k); ,2,拆箱转换,是指将一个对象类型的数据显式地转换成一个值类型数据。,拆箱操作包括分为两步:首先检查对象实例,确保它是给定值类型的一个装箱值,然后把实例的值复制到值类型数据中。,例如:下面两条语句就执行了拆箱转换:,object,obj,=228;,int,k=(,int)obj,;,拆箱转换需要(而且必须)执行显式转换,这是它与装箱转换的不同之处。,例:在程序中使用拆箱转换,程序代码如下:,using System,class,UnboxingDemo,static void Main( ),int,k=228;,object,obj,=k; /,装箱转换,int,j=(,int,),obj,; /,拆箱转换,Console.WriteLine(,k,=0tobj=1tj=2, k,obj, j);,3.2.1,常量,在,C#,中,常量在程序的运行过程中其值是不能改变的,例如,数字,100,就是一个常量,这样的常量一般被称作常数。,可以通过关键字,const,来声明常量,格式如下:,const,类型标识符 常量名,=,表达式;,常量名必须是,C#,的合法标识符,在程序中通过常量名来访问该常量。类型标识符指示了所定义的常量的数据类型,而表达式的计算结果是所定义的常量的值。,如下例所示:,const double PI=3.14159265;,上面的语句定义了一个,double,型的常量,PI,,,它的值是,3.14159265,。,3.2,常量与变量,常量有如下特点:,l,在程序中,常量只能被赋予初始值。一旦赋予一个常量初始值,这个常量的值在程序的运行过程中就不允许改变,即无法对一个常量赋值。,l,定义常量时,表达式中的运算符对象只允许出现常量和常数,不能有变量存在。,例如:,int,b=30;,const,int,a=60;,const,int,k=b+20; /,错误,表达式中不允许出现变量,const,int,d=a+60; /,正确,因为,a,是常量,a=100; /,错误,不能修改常量的值,3.2.2,变量,变量是程序运行过程中用于存放数据的存储单元。变量的值在程序的运行过程中是可以改变的。,1,变量的定义,在定义变量的时候,首先必须给每一个变量起名,称为变量名,以便区分不同的变量,在计算机中,变量名代表存储地址。,C#,的变量名必须是合法的,C#,标识符。比如,,av,和,Index,都是合法的变量名。,C#,中采用如下格式定义一个变量:,类型标识符 变量名,1,,变量名,2,,,例:,float,fsum,;,string,strName,;,char a;,int,j;,注意:,C#,规定,任何变量在使用前,必须先定义,后使用。,2,变量的赋值,变量本身只是一个能保存某种类型的具体数据的内存单元(这里所说的“内存单元”不一定以字节为单位),对于程序而言,可以使用变量名来访问这个具体的内存单元。变量的赋值,就是将数据保存到变量中的过程。,在,C#,中,给一个变量赋值的格式如下:,变量名,=,表达式;,比如,事先定义了一个,double,型的变量,nAverage,和一个,int,型的变量,nAgeSum,:,double,nAverage,;,int,nAgeSum,;,如果要给,nAgeSum,变量赋予数值,210,,应该写成:,nAgeSum,=210;,在对变量进行赋值时,表达式的值的类型必须同变量的类型相同。,string,sName,;,int,nScore,;,则以下赋值是正确的:,sName,=,Jack,;,sName,=,Tom,;,nScore,=98;,但是,以下赋值是错误的:,sName,=5; /,不能将整数赋予字符串对象,nScore,=,Hello,; /,不能字符串赋予整型变量,3.,变量的初始化,在定义变量的同时,可以对变量赋值,称为变量的初始化。在,C#,中,对变量进行初始化的格式如下:,类型标识符 变量名,=,表达式;,例如:,double,nScore,=98.5;,这代表定义一个,double,型变量,nScore,,,并将其赋予初始值,98.5,。,3.3,运算符和表达式,3.3.1,运算符,运算符是表示各种不同运算的符号。,C#,运算符可以分为以下几类:算术运算符、赋值运算符、关系运算符、逻辑运算符、条件运算符和其他运算符。,1,算术运算符,算术运算符用于对操作数进行算术运算。,C#,的算术运算符同数学中的算术运算符是很相似的。下表列出了,C#,中允许使用的所有运算符。,表,C#,算术运算符,运算符,意义,运算对象数目,运算对象类型,运算结果类型,实例,+,取正或加法,1,或,2,任何数值类型,数值类型,+5,、,6+8+a,取负或减法,1,或,2,3,、,a-b,*,乘法,2,3*a*b,、,5*2,/,除法,2,7/4,、,a/b,%,模(求整数除法的余数,如,7,除以,3,的余数为,2,,则,7%3,等于,2,),2,a%(2+5),、,a%b,、,3%2,+,自增运算,1,a+,、,+b,-,自减运算,1,a-,、,-b,尽管,+,、,-,、*和,/,这些运算符的意义和数学上的运算符是一样的。但是在一些特殊的环境下,有一些特殊的解释。,首先,当对整数进行“,/”,运算时,余数都被舍去了。,例如,,10/3,在整数除法中等于,3,。,可以通过模运算符,%,来获得这个除法的余数。运算符,%,可以应用于整数和浮点类型,例如,,10%3,的结果是,1,,,10.0%3.0,的结果也是,1,。,例:,/ %,运算符的示例,using System;,class,ModDemo, static void Main( ),int,iresult,irem,;,double,dreult,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=3 10%3=1,10.0/3.0=3.33333333333333 10.0%3.0=1,C#,还有两种特殊的算术运算符:,+(,自增运算符,),和,-(,自减速运算符,),,其作用是使变量的值自动增加,1,或者减少,1,。,因此,,x=x+1,和,x+,一样的;,x=x-1,和,x-,是一样的。,自增和自减运算符既可以在操作数前面(前缀),也可以在操作数后在(后缀)。例如,,x=x+1;,可以被写成,+x; /,前缀格式,或者,x+,;,/,后缀格式,当自增或自减运算符用在一个较大的表达式中一部分时,存在着重要的区别。当一个自增或自减运算符在它的操作数前面时,,C#,将在取得操作数的值前执行自增或自减操作,并将其用于表达式的其他部分。如果运算符在操作数的后面,,C#,将先取得操作数的值,然后进行自增或自减运算。,比如下面的例子:,x=16;,y=+x;,在这种情况下,,y,被赋值为,17,,但是,如果代码如下所写:,x=16;,y=x+;,那么,y,被赋值为,16,。在这两种情况下,,x,都被赋值为,11,,不同之处在于发生的时机。自增运算符和自减运算符发生的时机有非常重要的意义。,例:演示自增运算符。,using System;,class Test, static void Main( ),int,x=2;,int,y=x+;,Console.WriteLine(,y,=0, y);,y=+x;,Console.WriteLine(,y,=0, y);,程序说明:第一次先使用后自增,所以输出,2,,第二交先自增后使用,所以输出,4,。,注意:,+,、,-,只能用变量,而不能用于常量或表达式,例如,12+,或,-(,x+y,),都是错误的。,2,赋值运算符,赋值运算符用于将一个数据赋予一个变量,赋值操作符的左操作数必须是一个变量,赋值结果是将一个新的数值存放在变量所指示的内存空间中。,其中“,=”,是简单的赋值运算符,它的作用是将右边的数据赋值给左边的变量,数据可以是常量,也可以是表达式。,例如,,x=8,或者,x=9-x,都是合法的,它们分别执行了一次赋值操作。,表,C#,的赋值运算符,类 型,符 号,说 明,简单赋值运算符,=,x=1,复合赋值运算符,+=,x+=1,等价于,x=x+1,-=,x-=1,等价于,x=x-1,*,=1,x*=1,等价于,x=x*1,/=,x/=1,等价于,x=x/1,%=,x%=1,等价于,x=x%1,复合赋值运算符的运算非常简单,例如,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),。,3.,关系运算符,关系运算符用于在程序中比较两个值的大小,关系运算的结果类型是布尔型,也就说,结果不是,true,就是,false,。,一个关系运算符两种的运算对象如果是数值类型的对象,则比较的是两个数的大小;如果是字符型对象,则比较的是两个字符的,Unicode,编码的大小,比如:字符,x,的,Unicode,编码小于,y,,,则关系表达式,x5-2,(结果是,false,),表,C#,的关系运算符,符号,意义,运算结果类型,运算对象个数,实例,大于,布尔型。如果条件成立,结果为,true,,否则结果为,false,2,36,x2,ba,小于,3.143,x=,大于等于,3.26=b,=,小于等于,PIb;,Console.WriteLine(“a,b is 0”, j);,该程序运行后,输出结果为:,ab is False,4,逻辑运算符,逻辑运算符用于表示两个布尔值之间的逻辑关系,逻辑运算结果是布尔类型。,逻辑非运算的结果是原先的运算结果的逆,即:如果原先运算结果为,false,,,则经过逻辑非运算后,结果为,true,;,原先为,true,则,结果为,false,。,逻辑与运算含义是,只有两个运算对象都为,true,,,结果才为,true,;,只要其中有一个是,false,,,结果就为,false,。,逻辑或运算含义是,只要两个运算对象中有一个是,true,,,结果就为,true,,,只有两个条件均为,false,,,结果才为,false,。,符号,意义,运算对象类型,运算结果类型,运算对象个数,实例,!,逻辑非,布尔类型,布尔类型,1,!(ij),&,逻辑与,2,x,y&x,0,|,逻辑或,2,x,y|x,0,表,C#,的逻辑运算符,当需要多个判定条件时,可以很方便地使用逻辑运算符将关系表达式连接起来。,比如,在表达式,xy&x0,中,:,只有当,xy,并且,x0,两个条件都满足时,结果才为,true,,,否则结果就为,false,;,在表达式,xy|x0,中,只要,xy,或者,x0,这两个条件中的任何一个成立,结果就为,true,只有在,xy,并且,x0,都不成立的条件下结果才为,false,;,在表达式,!(xy),中,如果,xy,则返回,false,如果,xy),同表达式,x8?15+a:39”,,,由于,68,的值为,false,,,所以整个表达式的值是,39,。,7.,其他运算符,(1),字符串连接符(,+,),字符串连接是最常用的字符串运算。所谓字符串的连接,就是将两个字符串连接在一起,形成新的字符串。,C#,提供了字符串连接运算符“,+,”,,用于连接两个字符串。比如:,“,abc”+,“,efg,”,结果是,abcefg,“,36812,”,+,“,3.14”,结果是,368123.14,(2),is,运算符,is,运算符用于检查表达式是否指定的类型,如果是,结果为,true,,,否则结果为,false,。,例如:,int,k=2;,bool,isTest,=k is,int,; /,isTest,=true,(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); /,出现错误,借助于,uncheked,运算符,就可以保证即使溢出,也会忽略错误,接受结果,例如:,short val1=2000, val2=2000;,short,myshort,=checked(short)(val1+val2); /,出现错误,,/,但是被忽略,3.3.2,表达式,表达式是运算符、常量和变量等组成的符号序列。,1,算术表达式,算术表达式是用算术运算符将运算对象连接起来的符合语法规则的式子,其中运算对象可以是常量、变量,也可以是函数。,在一个算术表达式中,算术运算有一定的优先运算顺序。在求表达式的值时,要按照运算符的优先级别进行计算。由于乘法、除法运算的优先级别高于加法和减法运算,所以在求算术表达式的结果时,首先要进行乘除运算,然后再进行加减运算。如果一个表达式中包含连续两个或两个以上级别相同的运算符,则要遵循自左向右的顺序进行运算。,2,赋值表达式,由赋值运算符将变量和表达式连接起来的式子称为赋值表达式,它的一般格式为:,变量 赋值运算符 表达式,对赋值表达式求解的过程就是将表达式的结果赋给变量。例如赋值表达式,a=15,,,就是把,15,这个常数赋值给变量,a,。,在赋值表达式中,表达式又可以是赋值表达式。,例如:,y=x=8*8+3,这个赋值表达式的值是,67,。由于赋值运算符的结合性是自右至左的,所以,y=x=8*8+3,和,y=(x=8*8+3),是等价的。,3,关系表达式,用关系运算符将两个表达式连接起来的式子称为关系表达式。关系表达式的值是布尔类型,即真,(true),或假,(false),。,对关系表达式进行运算,也就是对参加运算的两个操作数进行比较,判断比较的结果是否满足关系运算符所描述的关系。如果满足,则关系表达式的结果为真,如果不满足,则结果为假。关系运算符的结合方向为自左向右。,例如:,x=8;,y=6;,z=xy+3; /,结果为,false,a=xy /,结果为,false,所有关系运算符的优先级别都高于赋值运算符而低于算术运算符。,4,逻辑运算符,用逻辑运算符将关系表达式或者逻辑值连接起来的式子称为逻辑表达式。逻辑表达式的值应该是一个布尔类型,它只能取,true,或,false,。,三个逻辑运算符的运算顺序为“逻辑非”最高,其次是“逻辑与”,最后为“逻辑或”。,例如逻辑表达式:,!(36)|(5=9)|(7=1),其结果为,true,,,因为上面的关系式等价于“,!false|true&false|true”,,,按照逻辑运算符优先顺序进行运算,得到最后结果为,true,。,5,条件表达式,由条件运算符和表达式组成的式子称为条件表达式。,例如:,83?5:2;,其结果为,5,,因为,83,为,true,,,则整个表达式的值为“,:”,前面表达式的值,这里是常数,5,。,6,多种运算符组成的表达式的运算,在对包含多种运算符表达式求值时,如果有括号,先计算括号里面的表达式。在运行时各运算符执行的先后级别和结合性确定。先执行运算优先级别高的运算,然后执行运算优先级别低的。,当运算符两边的运算对象的优先级别一样时,由运算符的结合性来控制运算执行的顺序。除了赋值运算符,所有的二元运算符都是左结合,即运算按照从左到右的顺序来执行。赋值运行符和条件运算符是右结合的,即运算按照从右到左的顺序来执行。,例如:表达式,3+9+(2+(8-3)*4%3)-6,的计算步骤为:,3+9+(2+5*4%3)-5,3+9+(2+20%3)-5,3+9+(2+2)-5,3+9+4-5,12+4-5,16-5,得出结果为,11,。这里乘法符和取模运算符、加法运算符和减法运算符的运算级别相同,计算表达式的方式是按照从左向右的顺序计算。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!