VisualC#2008程序设计第2章变量数据类型和表达式2020年7月3日星期五VisualC#2008程序设计第2章变量数据类型和表达式2.1注释2.2标识符2.3常量和变量2.4数据类型2.5类型转换2.6运算符2.1注释C#的注释方式可以使用双斜杠//和/*…*/进行注释。双斜杠//为单行注释,只用于单行语句的注释。/*…*/用于多行注释,可以注释多行语句。2.2标识符在程序中会用到各种对象,如符号常量、变量、数组、方法和类型等,为了识别这些对象,必须给每个对象一个名称,我们称为标识符。标识符是用户定义的一种字符序列。2.2标识符C#语言的标识符名称必须遵守以下规则:(1)所有的标识符只能由字母、数字和下划线这三类字符组成,而且第一个字符必须为字母或下划线;(2)标识符中不能包含空格、标点符号、运算符等其他符号;(3)标识符区分大小写;(4)标识符不能与C#关键字名相同。(5)标识符不能与C#中的类库名相同。(6)关键字(Keyword)也称为保留字,它是由系统预先定义好的标识符,在C#语言中有特定的含义。2.3常量和变量1.变量程序需要对数据进行读、写、运算等操作。当需要保存特定的值或计算结果时,就需要用到变量(Variable)。变量是计算机内存中被命名的数据存储单元,其中存储的值是可以改变的。2.3常量和变量(1)变量命名①变量名最好以小写字母开头;②变量名应具有描述性质:选取有意义的字符序列作为变量名,以便在程序中能从变量名中理解所标识的对象,从而便于阅读和记忆。③在包含多个单词的变量名中,从第二个单词开始,每个单词都采取首字母大写的形式。2.3常量和变量(2)变量的定义与使用在C#中,使用变量的基本原则是:必须先定义(声明)后使用。在定义一个变量时,必须指定其所储存的数据的类型。定义变量的一般格式为:数据类型变量名;2.3常量和变量2.常量常量(Constant)是指在程序执行过程中其值不能被改变的量。同变量一样,常量也用来存储数据。它们的区别在于,常量一旦初始化就不再发生变化,可以理解为符号化的常数。常量的声明和变量类似,需要指定其数据类型、常量名,以及初始值,并需要使用const关键字。定义常量的一般格式为:const数据类型常量名=表达式;2.4数据类型数据类型定义了数据的性质、表示、存储空间的结构。C#的数据类型可分为值类型和引用类型。值类型用来存储实际值,表示该数据类型存储的是一个数据值,基于值类型的变量直接包含值;引用类型则用来存储对实际数据的引用,即表示该数据类型不是直接存储数据值而是指向它所引用的值的地址。2.4数据类型2.4.1值类型C#的值类型可以分为三种:简单数据类型、结构类型(Struct)和枚举类型(Enumeration。1.简单类型简单数据类型可用于表示简单数据,可以分为整型、浮点型、十进制类型、布尔型和字符型,用于表示整数、小数、字符以及逻辑值等。2.4数据类型(1)整数类型C#中有8种整数类型,包括有符号字节型(sbyte)、字节型(byte)、短整型(short)、无符号短整型(ushort)、整型(int)、无符号整型(uint)、长整型(long)和无符号长整型(ulong)。2.4数据类型(2)浮点类型C#中的浮点型包含单精度浮点型(float)和双精度浮点型(double)两种,精度为小数位,它们的差别在于取值范围和精度不同。(3)十进制类型十进制类型(decimal)主要用于在金融和货币方面的计算,它的精度是位数(digits)而不是小数位。2.4数据类型(4)布尔类型布尔类型表示现实中的“真”或“假”这两个概念,主要用来进行逻辑判断。在C#中,分别采用true和false这两个值来表示“真”和“假”。(5)字符类型字符型数据用来表示单个字符,包括数字字符、英文字母、表达符号、中文等。2.4数据类型2.枚举类型当在程序设计中需要定义一些具有赋值范围的变量(如星期、月份等)时,可以用枚举类型来定义。枚举将变量所能赋的值一一列举出来,给出一个具体的范围。枚举类型用关键字enum说明,定义如下:enum枚举名{枚举常量1[=整型常数],枚举常量2[=整型常数],...枚举常量n[=整型常数],};2.4数据类型3.结构类型结构体是一种复合的数据类型,它允许用其它数据类型构成一个结构类型,而一个结构类型变量内的所有数据可以作为一个整体进行处理。结构体的定义形式如下:struct结构体标识名{public类型成员变量名1;public类型成员变量名2;public类型成员变量名3;…};2.4数据类型2.4.2引用类型在内存中不直接存储引用类型的数据,而是存储该数据的地址,由此可以索引到所需的数据。引用类型包括类(class)、接口(interface)、数组(array)、字符串(string)和委托(delegate)等,我们将在后面的章节中详细介绍这些类型。2.4数据类型2.4.3隐含类型C#语言是一种强类型的语言,以前在声明变量的同时,必须显式指出该变量的类型,否则将会出现编译错误,从C#3.0开始,在声明一个变量的同时,可以不具体说明该变量的类型,而可以声明为var类型。用var来声明任何类型局部变量时,它只告诉编译器该变量需要初始化表达来推断变量的类型,并且只能是局部变量。2.4数据类型因为c#在编译代码的时候,要根据var变量的初始值来确定它的类型,所以有一定的约束规则,这些规则如下:(1)声明者必须包含一个构造者。这个构造者必须是一个表达式。这个构造者不能够是一个对象或者构造者集合的自身,但是它可以是一个新的包含一个对象或者构造者集合的表达式。(2)在编译时刻构造者表达式的类型不能为null类型。(3)如果本地变量声明包含多种声明者,那么构造者必须都具有相同的编译时刻类型。2.5类型转换2.5.1自动类型转换在C#中在运算时会对数据类型将自动进行转换,自动类型转换是系统默认的、不需要任何声明就可以进行的转换,它是由编译器根据不同类型数据间转换规则自动完成的,又称为隐式类型转换。自动转换遵守“由低级类型向高级类型转换,结果为高级类型”的原则,从而保证计算精度。2.5类型转换2.5.2强制类型转换强制类型转换就是强制执行从一种数据类型到另一种数据类型的转换,因此也称为显式类型转换,一般用强制类型转换符来实现。C#语言提供了一个类型转换运算符用于对数据类型进行强制转换,类型转换运算符用圆括号“()”表示,其使用格式如下:(类型名)变量或表达式2.5类型转换2.5.3字符串与基本数据类型间的转换(基本数据类型间的转换)System.Convert类位于命名空间System,它为数据转换提供了一整套方法,可以将一个基本数据类型转换为另一个基本数据类型。使用Convert类的方法可以方便的执行自动、强制数据类型转换的功能,以及不相关数据类型的转换。2.6运算符2.6.1运算符的分类C#具有丰富的运算符,按运算类型可分为赋值运算符、算术运算符、逻辑运算符、关系运算符、位运算符、指针运算符和取成员运算符等;按运算对象(又称为操作数)的个数又可分为一元运算符、二元运算符和三元运算符。2.6运算符2.6.2运算符的优先级在构成表达式时,运算符具有不同的优先级,还有不同的结合方式。优先级决定不同级别的运算符在参与运算时的运算次序;结合方式决定运算的方向和相同优先级的运算符在运算时的先后次序。当一个操作数出现在两个有相同优先级的运算符之间时,运算符按照出现的顺序由左向右执行。在C#中,除了赋值运算符,所有的二元运算符都是左结合的。2.6运算符2.6.3算术运算符1.加法运算符“+”与减法运算符“-”2.乘法运算符“*”与除法运算符“/”3.求余运算符“%”4.递增“++”和递减“––”运算符2.6运算符2.6.4赋值运算符赋值就是给一个变量赋一个新值。赋值运算用于改变变量的值,即为变量赋值。“=”运算符用于将等号右边的操作数(第二个操作数)的值赋给左边的操作数(第一个操作数)。C#中除了提供了一个简单赋值运算符“=”外,还提供了多个复合赋值运算符。2.6运算符2.6.5关系运算符关系运算符用于比较两个操作数的大小,其比较的结果是一个布尔型的值。运算符描述运算符描述==等于大于!=不等于=小于或等于小于=大于或等于2.6运算符2.6.6位运算符位运算符是对其操作数按其二进制形式逐位进行运算,参加位运算的操作数必须为整型或者是可以转换为整型的任何其他类型。运算符描述运算符描述&AND右移位|OR左移位^XOR(异或)~取反2.6运算符2.移位运算符(1)左移运算符运算规则:对运算符左边的操作数的每一位全部左移右边运算量表示的位数,右边空出的位补0。左移1位相当于该数乘以2,左移n位相当于该数乘以2n。(2)右移运算符运算规则:对运算符左边的运算量的每一位全部右移右边运算量表示的位数,右边低位被移出去舍弃掉,空出的高位补0还是补1。2.6运算符2.6.7逻辑运算符逻辑运算符用于将多个关系表达式或逻辑量(“真”或“假”)组成一个逻辑表达式。(1)&&:双目运算符,当且仅当两个操作数的值都为“真”时,运算结果为“真”,否则为“假”。等价于“同时”的含义。(2)||:双目运算符,当且仅当两个操作数的值都为“假”时,运算结果为“假”,否则为“真”。等价于“或者”的含义。(3)!:单目运算符,当操作数的值为“真”时,运算结果为“假”;当操作数的值为“假”时,运算结果为“真”。等价于“否定”的含义。2.6运算符2.6.8条件(三目)运算符条件运算符是唯一有3个操作数的运算符,所以有时又称为三元运算符。它由“?”和“:”两个符号组成,它的3个对象都是表达式。其语法格式如下:表达式1?表达式2:表达式3