1、面向对象程序设计课程辅导(一)-C+数据和运算 徐孝凯 一、 数据类型 数据是人们记录概念和事物的符号表示。如记录人的姓名用汉字表示,记录人的年龄用十进制数字表示,记录人的体重用十进制数字和小数点表示等,由此得到的姓名、年龄和体重都叫数据。根据数据的性质不同,可以把数据分为不同的类型。在日常使用中,数据主要被分为数值和文字(即非数值)两大类,数值又细分为整数和小数两类。 在C+语言中,每一种具体类型都对应着唯一的类型关键字、类型长度和值域范围。 表1-1类型关键字长度值域范围有符号短整数short, short int, signed short int2-215215-1内的整数无符号短整数
2、Unsigned short, unsigned short int20216-1内的整数有符号整数int, signed int 4-231231-1内的整数无符号整数Unsigned, unsigned int 40232-1内的整数有符号长整数long, long int, signed long int4-231231-1内的整数无符号长整数Unsigned long, unsigned long int 40232-1内的整数有符号字符char, signed char1-128+127内的整数无符号字符Unsigned char10255内的整数逻辑bool 10和1枚举enum
3、4为int值域内的一个子集单精度数float 4-3.402823*10383.402823*1038内的数双精度数double 8-1.7977*103081.7977*10308内的数长双精度long double8-1.7977*103081.7977*10308内的数指针 *40232-1内的整数引用 &数组 结构struct 联合union 类class 空值void 下面对表1-1作几点说明: 1. 在每一种类型的关键字一栏中,用逗号分开的各组关键字是等价的,都是表示该类型的关键字。如int和signed int都表示有符号整数类型。 2. 整数类型简称整型。大的整数类型包括小的整
4、数类型、字符类型、逻辑类型和枚举类型,而小的整数类型又包括短整型(short int)、整型(int)和长整型(long int)三种具体类型。读者应根据上下文联系来理解以后叙述中所用“整型”的含义。 3. 对于每一种整数类型和字符类型,又可分为有符号和无符号两种类型。通常使用较多的是有符号类型,所以时常也把有符号类型简称为所属类型。如把有符号整数类型简称为整型或int型,把有符号字符类型简称为字符型或char型。 4. 类型长度是指存储该类型值域范围内的任一个数据(又称为值)所占有的存储字节数,该字节数由系统规定,并且对任一数据都相同。如短整型长度为2,即存储每个短整数占用2个字节,对应16
5、个二进制位;整型长度为4,即存储每个整数占用4个字节,对应32个二进制位;字符型长度为1,即存储每个字符占用1个字节,对应8个二进制位。 5. 类型的值域范围是指该类型所对应的固定大小的存储空间按照相应的存储格式所能表示的值的范围。如对于有符号短整型来说,它对应2个字节的存储空间,存储格式为二进制整数补码格式,只能够表示(即存储)-215215-1,即-32768+32767之间的所有整数。若一个整数小于-32768或大于32767,则它就不是该类型中的一个值,即它不是一个短整数。又如对于无符号字符类型来说,它对应1个字节的存储空间,存储格式为二进制整数无符号(隐含为正)格式,只能够表示028
6、-1,即0255之间的所有整数。若一个整数小于0或大于255,则它就不是该类型中的一个值,即它不是一个字符数据。 6. 一个数的有效数字是指从该数最左边不为0的数字位起至最右边不为0的数字位止之间的每一个数字位,而这些数字位的个数称为该数的有效数字位数。如3500,2.705,-0.278,63.00和0.00104的有效数字位数分别为2,4,3,2和3。另外,若一个数带有指数部分,则它不影响整个数的有效数字位数。如3.14,3.14*105,314*10-6等都具有相同的有效数字的位数,即都为3位。 7. 单精度型的值域范围是从-3.402823*1038至3.402823*1038之间的不
7、超过7位有效数字的所有整数和小数。如-372.65, -0.14*10-6, 0.0, +12.7, -6.45, 100.0, 8.062*1025等都是单精度范围内的数。2.00708463不是单精度范围内的一个数,若舍去它的最后两位有效数字,使之近似为2.007084,则就成为单精度范围内的一个数。 8. 双精度型的值域范围比单精度型的值域范围更广,能够表示从-1.79769313486241*10308至1.79769313486241*10308之间的不超过15位有效数字的所有整数和小数。当一个数的有效数字的位数超过15时,则舍去第15位以后的所有位后,则可近似成为双精度范围内的一个
8、数。在VC+中长双精度型与双精度型定义完全相同。 9. 在VC+6.0版本中,整型(int)和长整型(long ing)具有完全相同的长度和存储格式,所以它们是等同的。但在早期的C+版本中,由于当时的机器字长为16位,所以整型和长整型的长度是不同的,前者为2个字节,后者为4个字节。无论如何,任一种C+语言都遵循short int型的长度小于等于int型长度,同时int型长度又小于等于long ing型长度的规定。 与上述情况类似,在VC+6.0中,双精度型(double)和长双精度型(long double)也具有完全相同的长度和存储格式,它们是等同的。在其他C+语言中也可能不同,但无论如何,
9、它们都遵循float型的长度小于等于double型长度,同时double型长度又小于等于long double型长度的规定。 使用C+中的sizeof运算符(该运算符是一个保留字)能够很容易知道任一种数据类型的长度。如sizeof(int)的值就是一个整型的长度,sizeof(long double)的值就是一个长双精度型的长度。 10. C+中的枚举、数组、结构、联合和类都是需要用户进行具体定义的类型,而其他所有类型都是预定义类型,即在C+系统内部已经定义了的类型。对于预定义类型,用户可以在程序中的任何地方直接使用它,对于用户定义类型,只有用户根据需要给出具体定义后,才能够在后面的程序中使用
10、它。 二、常量 常量是指在程序执行中不变的量,它分为字面常量和符号常量(又称标识符常量)两种表示方法。如25,-3.26,a,“constant”等都是字面常量,即字面本身就是它的值。符号常量是一个标识符,对应着一个存储空间,该空间中保存的数据就是该符号常量的值,这个数据是在定义符号常量时赋予的,是以后不能改变的。如C+保留字中的true和false就是系统预先定义的两个符号常量,它们的值分别为数值0和1。 关于符号常量的定义和赋初值的问题将在下一节同变量一起讨论,这一节只讨论字面常量的表示问题。 (一) 整型常量 整型常量简称整数,它有十进制、八进制和十六进制三种表示。 1. 十进制整数 十
11、进制整数由正号(+)或负号(-)开始的、接着为首位非0的若干个十进制数字所组成。若前缀为正号则为整数,若前缀为负号则为负数,若无符号则认为是正数。如38,-25,+120,74286等都是符合书写规定的十进制整数。 当一个十进制整数大于等于-2147483648即-231-1,同时小于等于2147483647即231-1时,则被系统看作是int型常量;当在21474836484294967295即232-1范围之内时,则被看作是unsigned int型常量;当超过上述两个范围时,则无法用C+整数类型表示,只有把它用实数(即带小数点的数)表示才能够被有效地存储和处理。 2. 八进制整数 八进制
12、整数由首位数字为0的后接若干个八进制数字(借用十进制数字中的07)所组成。八进制整数不带符号位,隐含为正数。如0,012,0377,04056等都是八进制整数,对应的十进制整数依次为0,10,255和2094。 当一个八进制整数大于等于0同时小于等于017777777777时,则称为int型常量,当大于等于020000000000同时小于等于037777777777时,则称为unsigned int型常量,超过上述两个范围的八进制整数则不要使用,因为没有相对应的C+整数类型。 3. 十六进制整数 十六进制整数由数字0和字母x(大、小写均可)开始的、后接若干个十六进制数字(09,AF或af)所组
13、成。同八进制整数一样,十六进制整数也均为正数。如0x0,0X25,0x1ff,0x30CA等都是十六进制整数,对应的十进制整数依次为0,37,511和4298。 当一个十六进制整数大于等于0同时小于等于0x7FFFFFFF时,则称为int型常量,当大于等于0x80000000同时小于等于0xFFFFFFFF时,则称为unsigned int型常量,超过上述两个范围的十六进制整数没有相对应的C+整数类型,所以不能使用它们。 4. 在整数末尾使用u和l字母 对于任一种进制的整数,若后缀有字母u(大、小写等效),则硬性规定它为一个无符号整型(unsigned int)数,若后缀有字母l(大、小写等效
14、),则硬性规定它为一个长整型(long int)数。在一个整数的末尾,可以同时使用u和l,并且对排列无要求。如25U,0327UL,0x3ffbL,648LU等都是整数,其类型依次为unsigned int,unsigned long int,long int和unsigned long int。 (二) 字符常量 字符常量简称字符,它以单引号作为起止标记,中间为一个或若干个字符。如a,%,n,012,125,x4F等都是合乎规定的字符常量。每个字符常量只表示一个字符,当字符常量的一对单引号内多于一个字符时,则将按规定解释为一个字符。如a表示字符a,125解释为字符U(稍后便知是如何解释的)。
15、 因为字符型的长度为1,值域范围是-128127或0255,而在计算机领域使用的ASCII字符,其ASCII码值为0127,正好在C+字符型值域内。所以,每个ASCII字符均是一个字符型数据,即字符型中的一个值。 对于ASCII字符集中的每个可显示字符(个别字符除外),对应的C+字符常量就是它本身,对应的值就是该字符的ASCII码,表示时用单引号括起来;对于象回车、换行那样的具有控制功能的字符,以及对于象单引号、双引号那样的作为特殊标记使用的字符,就无法采用上述的表示方法。为此引入了“转义”字符的概念,其含义是:以反斜线作引导的下一个字符失去了原来的含义,而转义为具有某种控制功能的字符。如n中
16、的字符n通过前面使用的反斜线转义后就成为一个换行符,其ASCII码为10。为了表示用作特殊标记使用的可显示字符,也需要用反斜线字符引导。如表示单引号字符,若直接使用表示单引号是不行的,因为此时的单引号具有二义性。另外,还允许用反斜线引导一个具有1至3位的八进制整数或一个以字母x作为开始标记的具有1至2位的十六进制整数,对应的字符就是以这个整数作为ASCII码的字符。如0,12,73,146,x5A等对应的字符依次为空字符(其ASCII码为0,注意:它不同与空格字符,空格字符的ASCII码为32),换行符,;,f和Z等。 由反斜线字符开始的符合上述使用规定的字符序列称为转义序列,C+语言中的所有
17、转义序列如表1-2所示。 表1-2转义序列对应值对应功能或字符转义序列对应值对应功能或字符a7响铃92反斜线b8退格39单引号f12换页”34双引号n10换行?63问号r13回车cccccc的十进制值该值对应的字符t9水平制表xhhhh的十进制值该值对应的字符v11垂直制表 转义序列不但可以作为字符常量,也可以同其他字符一样使用在字符串中。如 “abcn”字符串中含有四个字符,最后一个为换行符, “tx=”中的首字符为水平制表符,当输出它时将使光标后移8个字符位置。 对于一个字符,当用于输出显示时,将显示出字符本身或体现出相应的控制功能,当出现在计算表达式中时,将使用它的ASCII码。如: (
18、1) char ch=E; (2) int x=ch+2; (3) if(chC) coutchCendl; (4) coutC比较,实际上是取出各自的值(即对应的ASCII码)比较,因条件成立,所以执行其后的输出语句,将向屏幕输出EC。第四条语句输出一个字符串,即原样输出apple和使光标移到下一行开始位置。 (三) 逻辑常量 逻辑常量是逻辑类型中的值,VC+用保留字bool表示逻辑类型,该类型只含有两个值,即整数0和1,用0表示逻辑假,用1表示逻辑真。在VC+中还定义了这两个逻辑值所对应的符号常量false和true,false的值为0,表示逻辑假,true的值为1,表示逻辑真。 由于逻辑
19、值是整数0和1,所以它也能够象其他整数一样出现在表达式里,参与各种整数运算。 (四) 枚举常量 枚举常量是枚举类型中的值,即枚举值。枚举类型是一种用户定义的类型,只有用户在程序中定义它后才能被使用。用户通常利用枚举类型定义程序中需要使用的一组相关的符号常量。枚举类型的定义格式为: enum ; 它是一条枚举类型定义语句,该语句以enum保留字开始,接着为枚举类型名,它是用户命名的一个标识符,以后就直接使用它表示该类型,枚举类型名后为该类型的定义体,它是由一对花括号和其中的枚举表所组成,枚举表为一组用逗号分开的由用户命名的符号常量,每个符号常量又称为枚举常量或枚举值。如: (1) enum co
20、lorred, yellow, blue; (2) enum daySun, Mon, Tues, Wed, Thur, Fri, Sat; 第一条语句定义了一个枚举类型color,用来表示颜色,它包含三个枚举值red,yellow和blue,分别代表红色、黄色和兰色。 第二条语句定义了一个枚举类型day,用来表示日期,它包含7个枚举值,分别表示星期日、星期一至星期六。 一种枚举类型被定义后,可以象整型等预定义类型一样使用在允许出现数据类型的任何地方。如可以利用它定义变量。 (1) enum color c1, c2,c3;(2) enum day today, workday; (3) c1
21、=red;(4) workday=Wed; 第一条语句开始的保留字enum和类型标识符colou表示上述定义的枚举类型color,其中enum可以省略不写,后面的三个标识符c1,c2和c3表示该类型的三个变量,每一个变量用来表示该枚举表中列出的任一个值。 第二条语句开始的两个成分(成分之间的空格除外)表示上述定义的枚举类型day,同样enum可以省略不写,后面的两个标识符today和workday表示该类型的两个变量,每一个变量用来表示该枚举表中列出的七个值中的任一个值。 第三条语句把枚举值red赋给变量c1,第四条语句把枚举值Wed赋给变量workday。 在一个枚举类型的枚举表中列出的每一
22、个枚举常量都对应着一个整数值,该整数值可以由系统自动确认,也可以由用户指定。若用户在枚举表中一个枚举常量后加上赋值号和一个整型常量,则就表示枚举常量被赋予了这个整型常量的值。如: enum daySun=7, Mon=0, Tues, Wed, Thur, Fri, Sat; 用户指定了Sun的值为7,Mon的值为0。 若用户没有给一个枚举常量赋初值,则系统给它赋予的值是它前一项枚举常量的值加1,若它本身就是首项,则被自动赋予整数0。如对于上述定义的color类型,red,yellow和blue的值分别为0,1和2;对于刚被修改定义的day类型,各枚举常量的值依次为7,0,1,2,3,4,5,
23、6。 由于各枚举常量的值是一个整数,所以可把它同一般整数一样看待,参与整数的各种运算。又由于它本身是一个符号常量,所以当作为输出数据项时,输出的是它的整数值,而不是它的标识符,这一点同输出其他类型的符号常量是一致的。 (五) 实型常量 实型常量简称实数,它有十进制的定点和浮点两种表示方法,不存在其他进制的表示。 1. 定点表示 定点表示的实数简称定点数,它是由一个符号(正号可以省略)后接若干个十进制数字和一个小数点所组成,这个小数点可以处在任何一个数字位之前或之后。如.12, 1.2, 12., 0.12, -12.40, +3.14, -.02037, -36.0等都是符合书写规定的定点数。
24、 2. 浮点表示 浮点表示的实数简称浮点数,它是由一个十进制整数或定点数后接一个字母e(大、小均可)和一个1至3位的十进制整数所组成,字母e之前的部分称为该浮点数的尾数,之后的部分成为该浮点数的指数,该浮点数的值就是它的尾数乘以10的指数幂。如3.23E5, +3.25e-8, 2E4, 0.376E-15,1e-6, -6.04E+12, .43E0, 96.e24等都是合乎规定的浮点数,它们对应的数值分别为:3.25*105, 3.25*10-8, 20000, 0.376*10-15, 10-6, -6.04*1012, 0.43, 96*1024等。 对于一个浮点数,若将它尾数中的小数
25、点调整到最左边第一个非零数字的后面,则称它为规格化(或标准化)浮点数。如21.6E8和-0.074E5是非规定化的,若将它们分别调整为2.16E9和-7.4E3则都是规格化的浮点数。 3. 实数类型的确定 对于一个定点数或浮点数,C+自动按一个双精度数来存储,它占用8个字节的存储空间。若在一个定点数或浮点数之后加上字母f(大、小写均可),则自动按一个单精度数来存储,它占用4个字节的存储空间。如3.24和3.24f,虽然数值相同,但分别代表一个双精度数和一个单精度数,同样,-2.78E5为一个双精度数,而-2.78E5F为一个单精度数。 (六) 地址常量 指针类型的值域是0232-1之间的所有整
26、数,每一个整数代表内存空间中一个对应单元(若存在的话)的存储地址,每一个整数地址都不允许用户直接使用来访问内存,以防止用户对内存系统数据的有意或无意的破坏。但用户可以直接使用整数0作为地址常量,它是C+中唯一允许使用的地址常量,并称为空地址常量,它对应的符号常量为NULL,表示不代表任何地址,在iostream.h等头文件中有此常量的定义。 三、变量 变量是其值可以被改变的量。每一个变量都属于一种数据类型,用来表示(即存储)该类型中的一个值。在程序中只有存在了一种数据类型后,才能够利用它定义出该类型的变量。根据这一原则,我们可以随时利用C+语言中的每一种预定义类型和用户已经定义的每一种类型定义
27、所需要使用的变量。一个变量只有被定义后才能被使用,即才能进行存储和读取其值的操作。 (一) 变量定义语句 变量定义是通过变量定义语句实现的,该语句的一般格式为: =,; 为已存在的一种数据类型,如short, int, long, char, bool, float, double等都是类型关键字,分别代表系统预定义的短整型、整型、长整型、字符型、逻辑型(又称布尔型)、单精度型和双精度型。对于用户自定义的类型,可从类型关键字中省略其保留字。如假定struct worker是用户自定义的一种结构类型,则前面的保留字struct可以省略。 是用户定义的一个标识符,用来表示一个变量,该变量可以通过后
28、面的可选项赋予一个值,称为给变量赋初值,是一个表达式,它的值就是赋予变量的初值。 该语句格式后面使用的省略号表示在一条语句中可以定义多个变量,但各变量定义之间必须用逗号分开。 (二) 语句格式举例 (1) int a,b; (2) char ch1=a, ch2=A; (3) int x=a+2*b; (4) double d1, d2=0.0, d3=3.14159; 第一条语句定义了两个整型变量a和b;第二条语句定义了两个字符变量ch1和ch2,并被分别赋初值为字符a和A;第三条语句定义了一个整型变量x,并赋予表达式a+2*b的值作为初值;第四条语句定义了三个双精度变量,分别为d1, d2
29、和d3,其中d2被赋予初值0.0,d3被赋予初值3.14159。 (三) 语句执行过程 当程序执行到一条变量定义语句时,首先为所定义的每个变量在内存中分配与类型长度相同的存储单元,如对每个整型变量分配4个字节的存储单元,对每个双精度变量分配8个字节的存储单元;接着若变量名后带有可选项,则计算出初值表达式的值,并把它保存到变量所对应的存储单元中,表示给变量赋初值,若变量名后不带有可选项,则当所属语句处于函数之外时,将自动给变量赋予初值0,否则不赋予任何值,此时的变量值是不确定的,实际上是存储单元中的原有值(现在被称为垃圾)。 (四) 语句应用举例 假定要计算一个圆的周长和面积,则圆的半径、周长和
30、面积都需要设定为变量,假定分别用radius, girth和area标识符表示,它们的类型均应为实数型,即单精度或双精度型,通常使用双精度型。根据圆的半径计算周长和面积的公式为: girth=2pradius area=pradiusradius 下面给出用C+语言编写的计算程序: #include void main() double radius, girth, area; /定义变量 cinradius; /从键盘输入一个圆的半径 girth=2*3.14159*radius; /计算周长 area=3.14159*radius*radius; /计算面积 coutradius:radi
31、usendl; coutgirth: girthendl; coutarea: areaendl; 在这个程序的主函数中,第一条语句定义了三个变量,由于没有给它们赋初值,所以其值是不确定的;第二条语句从键盘输入一个常数给半径radius,输入的常数可以是整数,也可以是定点数或浮点数,系统将自动把它转换为一个双精度数后再赋给radius,即赋给该变量所对应的存储单元;第三条和第四条语句分别计算出赋值号右边表达式的值,再分别赋给变量girth和area;第五至七条语句依次向屏幕输出圆的半径、周长和面积。 假定程序运行后从键盘上输入的半径为5.62,则得到的输出结果为: radius:5.62 gi
32、rth: 35.3115 area: 99.2252 (五) 符号常量定义语句 符号常量定义语句同变量定义语句类似,其语句格式为: const = ,; 该语句以保留字const开始并标识,后跟符号常量的类型关键字,接下去为符号常量名,它是一个用户定义的标识符,符号常量名之后为一个赋值号和一个表达式(注意:表达式中既可以含有常量也可以含有变量),由此可见,在定义符号常量时必须同时对其赋初值。该语句同样也可以定义多个符号常量。 系统执行符号常量定义语句也同执行变量定义语句一样,需要依次为每个符号常量分配存储单元并赋初值。 一个符号常量被定义后,它的值就是定义时所赋予的初值,以后将始终保持不变,因
33、为系统只允许读取它的值,而不允许向它赋值。 另外,在符号常量的定义语句中,若为int,则可以被省略。 下面给出几个符号常量定义语句的例子: (1) const int A1=5, A2=A1*4; (2) const double PI=3.14159; (3) const int MaxSize=100; 第一条语句定义了两个整型符号常量A1和A2,并使得它们的初值分别为5和20;第二条语句定义了一个双精度符号常量PI,用它表示数学上p的值3.14159;第三条语句定义了一个整型符号常量MaxSize,用它代表整数100。第一条和第三条语句中的int均可以省略不写。 符号常量定义语句既可以出
34、现在函数体外,也可以出现在函数体内,这一点也跟变量定义语句相同。 符号常量也必须遵循先定义后使用的原则,这也与变量的定义和使用的规则相同。 (六) 使用#define命令定义符号常量 #define命令是一条预处理命令,其命令格式为: #define 是用户定义的标识符,又称为宏或宏标识符,也是由用户给定的、将用来代替宏的一个字符序列。宏被该命令定义后,可以使用在其后的程序中,当程序被编译时将把所有地方使用的宏标识符替换为对应的,并把宏命令删除掉。 如一个宏命令为: #define ABC 10 若在主函数中有这样一条语句: int x=ABC*ABC; 则当编译后改变为: int x=10*
35、10; 若上述宏命令中的字符序列不是10,而是2+5,则编译后改变为: int x=2+5*2+5; 可见宏替换后改变了原表达式中运算的优先次序,为了克服可能出现的这种错误,通常使用带括号的宏字符序列。如可将上述定义的宏命令改写为: #define ABC (2+5) 上述语句将会被正确地替换为: int x=(2+5)*(2+5); 由于使用const语句定义符号常量带有数据类型,以便系统进行类型检查,同时该语句具有计算初值表达式和给符号常量赋初值的功能,所以使用它比使用宏命令定义符号常量要优越得多,因此提倡在程序中使用const语句定义符号常量。 (七) 使用变量和常量的程序举例 #inc
36、lude #define M -1 /符号常量中的字母通常采用大写 const int N=10; void main() int x,y; coutx; if(xN) y=M*x+1; else y=(x+M)*x-3; coutx yendl; 程序运行后若从键盘上输入数值5,则得到的输出结果为: 5 -4 若从键盘上输入的数值为20,则得到的输出结果为: 20 377 四、运算符 C+运算符又称操作符,它是对数据进行运算的符号,参与运算的数据称为操作数或运算对象,由操作数和操作符连接而成的有效的式子称为表达式。 按照运算符要求操作数个数的多少,可把C+运算符分为单目(或一元)运算符、双目
37、(或二元)运算符和三目(或三元)运算符三类。单目运算符一般位于操作数的前面,如对x取负为-x;双目运算符一般位于两个操作数之间,如两个数a和b相加表示为a+b;三目运算符只有一个,即为条件运算符,它含有两个字符,分别把三个操作数分开。 一个运算符可能是一个字符,也可能由两个或三个字符所组成,还有的是一些C+保留字。如赋值号(=)就是一个字符,不等于号(!=)就是两个字符,左移赋值号(间接访问数据成员 2 !逻辑非 单目从右向左 按位取反+,-取正,取负 *间接访问对象 &取对象地址+,-增1,减1()强制类型转换Sizeof测类型长度New动态申请内存单元Delete释放new申请的单元 3
38、.*引用指向类成员的指针 双目从左到右 -*引用指向类成员的指针 4*,/,%乘,除,取余 双目从左向右 5+,- 加,减 6按位左移,按位右移 7,=小于,小于等于,大于,大于等于 8=,!=等于,不等于 9&按位与 10按位异或 11|按位或 12&逻辑与 13|逻辑或 14?:条件运算符 三目从右向左 15=赋值 双目从右向左+=,-=加赋值,减赋值*=,/=乘赋值,除赋值%=,&=取余赋值,按位与赋值=按位异或赋值|=按位或赋值=按位右移赋值 16,逗号运算符 双目从左向右 下面对表1-3中的一些运算符作简要介绍,对剩余的一些运算符将结合以后各章的有关内容一同介绍。 1. 双目算术运算
39、符 这类运算符包括加、减、乘、除和取余等五种,它们的含义与数学上相同。该类运算的操作数为任一种数值类型,包括任一种整数类型和任一种实数类型。由算术运算符(包括单目和双目)连接操作数而成的式子称为算术(或数值)表达式,每个算术表达式的值为一个数值,其类型按如下规则确定: 当参加运算的两个操作数均为整型(但具体类型可以不同,如一个为int型,另一个为char型)时,则运算结果为int型(因在VC+中int和long int的值域范围相同,所以可均认为是int型),注意:两个整数相除得到的是它们的整数商,两个整数取余得到的是整余数; 当参加运算的两个操作数中至少有一个是单精度型,并且另一个不是双精度型时,则运算结果为float型; 当参加运算的两个操作数中至少有一个是双精度型时,则运算结果为double型。 假定整型变量x和y的值分别为25和6,则下面给出整数运算,特别是含有除和取余运算的例子: x/8=3 x/y+5=9 10-y%x=4 x%5=0 x*3%4=3 65%x/3=5 -56/6=-9 -56%6=-2 若要使两个整数相除得到一个实数,则必须将其中之一转变为实数。如: 9.0/2=4.5 -15/4.0=-3.75 float(y)/x=0.24