1、1.1 数值类型程序处理的对象是各种各样的数据,因此,我们必须让计算机了解需要处理什么样的数据,以及采用哪种方式进行处理,按什么格式进行保存等等。比如,在编码程序中需要处理单个字符,在定购票系统需要打印货币金额,在科学运算中我们需要不同精度的小数,这些都是不同的数据类型。C#将数据分为不同的类型,它们分别表示不同范围、不同精度、不同用途的数据。将数据分类是由于不同类型的数据在计算机内占用的内存空间大小不同、运算速度不同。为了有效利用计算机的内存资源和达到最佳的程序运行效果,需要根据不同形式数据的大小和特征来选择最合适表示它们的数据类型。C#语言的数值类型包括了由整数类型、浮点 数类型、小数类型
2、、字符型、布尔型组成的简单类型和由结构、枚举等组成的构造类型。1.1.1 整数类型整数类型是指那些没有小数部分的数字,包括整数常量和整数变量。整数常量即整数类型的常数,一般包括以下两种形式。 十进制数:348、-56、0 等。 十六进制数:这类数据以“0x”(其中 0 是数字 0)开头,如: 0x61,相当于十进制数据 97。整数类型又有有符号整数与无符号整数。有符号整数可以带正负号,无符号整数不需带正负号,默认为正数。顾名思义,整数类型的变量的值为整数。数学上的整数可以从负无穷大到正无穷大,但是由于计算机的存储单元是有限的,所以计算机语言提供的整数类型的值总是在一定的范围之内。根据变量在内存
3、中所占的二进制位数不同和是否有符号位,C#语言中整数类型分八种:字节型(sbyte) 、无符号字节型(byte) 、短整型(short) 、无符号短整型(ushort) 、整型(int) 、无符号整型(uint) 、长整型(long ) 、无符号长整型( ulong) 。所占的二进制位数不同,表示的数值的取值范围也不同,所占的二进制位数越多,表示的数值的取值范围越大。比如说 8 位整数,它可以表示 2 的 8 次幂个数值,即 256 个不同的数值,如果用来表示有符号 8 位整数(sbyte),其取值范围就是在-128 到 127 之间,而如果用来表示无符号 8 位整数(byte),其取值范围就
4、是在 0 到 255 之间。具体各整数类型及其取值范围见表 2-2。表 2-2 整数类型及其取值范围数据类型特 征 取值范围 示 例sbyte 有符号 8 位整数-128 127 sbyte val=16 ;byte 无符号 8 位整数0 255 byte val=16 ;short 有符号 16 位整数-32,768 32,767 short val=16 ;ushort 无符号 16 位整数0 65,535 ushort val=16 ;int 有符号 32 位整数-2,147,483,6482,147,483,647 int val=16 ;uint 无符号 32 位整数0 4,294,
5、967,295 uint val1=16 ;uint val2=16U ;long 有符号 64 位整数-9,223,372,036,854,775,8089,223,372,036,854,775,807 long val1=16 ;long val2=16L ;ulong 无符号 64 位整数0 18,446,744,073,709,551,615 ulong val1=16 ;ulong val2=16U ;ulong val3=16L ;ulong val4=16UL ;1.1.2 字符类型可使用关键字 char 来定义字符类型数据。char 类型的变量占用 2 个字节的内存,其中存储
6、的数字(对应某个 ASCII 码或 Unicode 码)被解释为一个字符。字符变量用来存放字符常量,请注意只能放一个字符。举例:char ch1=a;char ch3=(char)97 ; /97 是字符 a 对应的 ASCII 码【例 2-4】输出 26 个大写字母。大写字母的 ASCII 码范围为 6590,小写字母的ASCII 码为 97122。using System;class Programstatic void Main(string args)int num;char ch;for (num = 65; num 0 1.1.5 字符串字符串类型的变量是由关键字 string 来
7、定义的,它是类 System.String 的别名。字符串类型也有常量和变量之分。字符串变量由关键字 string 来定义,而字符串常量和字符常量很相似,所不同的就是字符常量是用单引号来表示,而字符串常量要用双引号“”表示。另外,一个字符常量只能由一个字符组成,而字符串常量可以由一个或多个字符组成。除了上述描述的字符串常量的形式外,还可以指定一种逐字字符串常量。逐字字符串常量以开始,引号内的内容可以包含新行、制表符等,而不必使用转义序列。唯一的例外是,如果要在文本中要包含双引号”,就必须在一行中使用一对双引号” 。如:String str = “Helloworld“;【例 2-8】使用字符串
8、数据类型。using System;class Programstatic void Main(string args)string a = “Hello “; /定义字符串并赋值string b = “world“;string c;c = a + b; /连接a、b字符串Console.WriteLine(c);Console.WriteLine(c.Length);/输出字符串的长度 1.2 运算符和表达式应用程序使用运算符来处理用户输入的数据,运算符(如+和-)用于处理变量并返回值。运算符是一组用于计算或比较的一个或多个字符,运算符可以将一个或多个数据值(称为操作数)转换成新的数据值。
9、表达式(expression)是可以进行运算并能够产生值的式子,是操作数与运算符按照一定的规则的组合,计算的结果称为此表达式的值。操作数是运算的对象,可以是任意常量、变量、方法等等。运算符是具体要执行的操作。下面是表达式的示例:double Pi = 3.1415926 ;double r =10.0 ;double area ;area = Pi*r*r ;该例中声明圆周率 Pi 的值为 3.1415926 ,圆半径 r 的值为 10.0,圆的面积 area 为 Pi*r*r ,式子 Pi*r*r 就是一个表达式,计算出来的结果 4712 就是表达式的值。1.2.1 赋值运算符及其表达式赋值
10、运算就是给一个变量赋一个新值。赋值运算符的左操作数必须是一个变量。表 2-4 列出了操作符的用法并描述了常用的赋值操作符。表 2-4 常用的赋值操作符操作符 用法 描述= X = 5; 在变量 X 中存储值 5+= X+=5; 等同于:X = X + 5;-= X-=5; 等同于:X = X - 5;*= X*=5; 等同于:X = X * 5;/= X/=5; 等同于:X = X / 5;%= X%=5; 等同于:X = X % 5;【例 2-12】 赋值运算。using System;class Programstatic void Main(string args)int op1 = 1
11、0;int op2 = 20;int result;result = op1 + op2;Console.WriteLine(result);result += 10; / 相当于 result=result+10;Console.WriteLine(result);1.2.2 算术运算符及其表达式算术运算符包括基本算术运算符+、*、+、和一元操作符自加、自减运算符“+ 、-“ 等。算术表达式就是用算术运算符将操作数连接起来的算式。表 2-5 描述了常用的算术操作符。表 2-5 常用的算术操作符操作符 描述 示例+ 用于两个数相加 X=Y+Z;如果 Y 等于 20, Z 等于 2,则 X 的值
12、是22。- 用于两个数相减 X=Y-Z;如果 Y 等于 20,Z 等于 2,则 , X 的值是 18。* 用于两个数相乘 X=Y*Z;如果 Y 等于 20, Z 等于 2,则 X 的值是40。/ 用于一个数除以另一个数X=Y/Z;如果 Y 等于 21, Z 等于 2,则 X 值为 10。如果 Y 等于 21.0,则 Z 等于 2,则 X 为10.5。% 用于两个数相除并返回余数,余数是指除法运算后剩余的小于除数的未除尽部分。X=Y%Z;如果 Y 等于 21, Z 等于 2,则 X 的值为1。一元操作符用于增加或减少操作数 1。表 2-6 说明了增加和减少操作符的用法。表 2-6 增加和减少操作
13、符的用法操作符 用法 描述 示例+操作数 ;(前置操作符)或操作数+; (后置操作符)用于将操作数的值增加 1。Y = +X;如果 X 的初始值为 5,则执行前置语句后,X 和 Y 的值都是 6。Y = X+;如果 X 的初始值是 5,则执行后置语句后,X 值是 6,Y 值是 5。- -操作数;(前置操作符)或操作数-; (后置用于将操作数的值减 1。Y = -X;如果 X 的初始值为 5,则执行前置语句后,X 和 Y 的值都是 4。Y = X-;操作符) 如果 X 的初始值是 5,则执行后置语句后,X 值是 4,Y 值是 5。注意前置操作符与后置操作符的不同: Y=+(或-)x:先将 x 值
14、做+(或-)运算,然后再赋值给 y; y=x+(或-):先将 x 值赋给 y,然后再将 x 值做+(或-)运算。 【例 2-13】加法运算。using System;class Programstatic void Main(string args)Console.WriteLine(8 + 8); /数字加法Console.WriteLine(“8+ 0.8“); /字符串原样输出Console.WriteLine(“a“ + “a“); /字符串加法Console.WriteLine(8.3 + “a“); /混合类型相加Console.WriteLine(8 + a); /字符和数字混合
15、相加Console.WriteLine(8.3 + a); /数字和字符相加【例 2-15】自增和自减运算。using System;class Programstatic void Main(string args)double x;x = 1.5;Console.WriteLine(+x); /自增运算,x 先加 1 再输出x = 1.5;Console.WriteLine(x+); /自增运算,x 先输出再加 1x = 1.5;Console.WriteLine(-x); /自减运算,x 先减 1 再输出x = 1.5;Console.WriteLine(x-); /自减运算,x 先输出
16、 1 再减【例 2-16】己知 a=l,b=2,c=3,x=2,计算 y=a*x2+bx+c 之值。using System;class Programstatic void Main(string args)int a = 1, b = 2, c = 3, x = 2, y;y = a * x*x + b * x + c;Console.WriteLine(“y=0“, y);【例 2-17】取余运算。using System;class Programstatic void Main(string args)Console.WriteLine(0 % 2); Console.WriteLi
17、ne(1 % 2);Console.WriteLine(5 % 2);1.2.3 关系运算符及其表达式关系运算符可以它理解为一实种“判断” ,判断的结果关系运算要么是“真” ,要么是“假” ,也就是说关系表达式的返回值总是布尔类型。C# 语言提供的关系运算符有六个:= = ! = =由操作数和关系运算符组成的表达式就是关系表达式。关系运算符用于比较两个值并且在比较结果的基础上执行某个操作。表 2-7 介绍了常用的比较操作符的用法。表 2-7 常用的比较操作符操作符 用法 描述 示例 (在以下示例中,X 的值假设为20,Y 的值假设为 25)表达式 1 表达式 2用于检查表达式 1 是否大于表达
18、式 2bool Result;Result = X Y;结果值为 false。= 表达式 1 =表达式 2用于检查表达式 1 是否大于等于表达式 2bool Result;Result = X = Y;结果值为 false。= 表达式 1 =表达式 2用于检查表达式 1 是否等于表达式 2bool Result;Result = X = Y;结果值为 false。!= 表达式 1 != 表达式 2用于检查表达式 1 是否不等于表达式 2bool Result;Result = X != Y;结果值为 true。1.2.4 逻辑运算及其表达式逻辑运算符是用来进行布尔表达式计算的。在 C#语言中提
19、供的逻辑运算符主要有三种:逻辑与“Console.WriteLine(“较大值为0“, max);运行结果如图 2-18 所示。图 2-18 例 2-18 运行结果说明:语句 int max=(ab)?a:b 的执行过程是:如果 ab 为 true,则条件表达式的值为 a,即max 的值为 a;否则 max 的值为 b;也就是说,max 变量的值取 a、b 中较大的值。1.2.6 运算符的优先级当表达式中包含多个运算符时,运算符的优先级控制各运算符的计算顺序。例如,表达式 x + y * z 按 x + (y * z) 计算,因为 * 运算符具有的优先级比 + 运算符高。表 2-9按照从最高到
20、最低的优先级顺序概括了所有的运算符:表 2-9 运算符优先级表运算符类别 运算符基本 x.y f(x) ax x+ x- new typeof checked unchecked一元 + - ! +x -x (T)x乘法 * / %加法 + -移位 关系和类型检测 = is as相等 = !=逻辑 AND class Programstatic void Main(string args)int num1, num2, sum;Console.Write(“请输入数字1:“);num1 =Convert.ToInt32( Console.ReadLine(); /从键盘读入字符串并转化为整数Console.Write(“请输入数字2:“);num2 = Convert.ToInt32(Console.ReadLine();sum = num1 + num2;Console.WriteLine(“0+1=2“,num1,num2,sum);