C++程序设计第2章.ppt
第第2章章数据类型与表达式数据类型与表达式2.1C+的数据类型的数据类型1、2、程序数据结构算法数据结构数据数据类型3、数据数据常量常量,变量变量4、数据类型、数据类型整型,实型整型,实型例:例:数据结构数据结构整型常量、实型变量整型常量、实型变量数据类型数据类型基本类型基本类型整型整型短整型短整型(shortint)整型整型(int)长整型长整型(longint)字符型字符型(char)浮点型浮点型单精度型单精度型(float)双精度型双精度型(double)长双精度型长双精度型(longdouble)布尔型布尔型(bool)空类型空类型(void)非基本类型非基本类型枚举类型枚举类型(enum)(构造类型构造类型)数组类型数组类型type结构体类型结构体类型(struct)共用体类型共用体类型(union)类类型类类型(class)指针类型指针类型type*引用类型引用类型type&布尔型就是逻辑型,空类型就是无值型。布尔型就是逻辑型,空类型就是无值型。表表2.12.1int 4B int 4B 范围范围unsigned int 4Bunsigned int 4Bshort 2B short 2B unsigned short 2Bunsigned short 2Blong 4B long 4B unsigned long 4Bunsigned long 4Bchar 1B char 1B unsigned char 1Bunsigned char 1Bfloat 4B float 4B double 8Bdouble 8BLong double 8BLong double 8B说明:说明:1 1)2 2)3 3)4 4)5 5)2.2常量常量2.2.1常量常量常量常量(字面常量或直接常量字面常量或直接常量)-其值不能改变的量称为常量。其值不能改变的量称为常量。例:例:1)整型常量:整型常量:12,0,-32)实型常量:实型常量:-1.23,4.63)字符常量:字符常量:a,d,A(注意:一定用单引号,注意:一定用单引号,单个字符单个字符)数值型常量数值型常量2.2.2数值常量数值常量1.整型常量整型常量1)整型常量的类型整型常量的类型整型常量的数值范围整型常量的数值范围整型常量可看作的类型整型常量可看作的类型可赋给整型变量的类型可赋给整型变量的类型-32768+32767shortshort或或int或或long-214783648214783647intint或或long065535(正数正数)unsignedshortunsignedshort或或unsignedint或或unsignedlong04294967295unsignedintunsignedlong(正数正数)或或unsignedint2)整型常量的表示方式整型常量的表示方式十进制整数:十进制整数:123,-456三种方式三种方式八进制整数:八进制整数:以数字以数字0开头的数,开头的数,0123十六进制整数十六进制整数:以数字以数字0 x开头的数,开头的数,0 x123整型常量后加一个字母整型常量后加一个字母l或或L,则认为是,则认为是long型型2.实型常量实型常量(浮点数浮点数)(1)实型常量的表示方式实型常量的表示方式1)十进制形式十进制形式如:如:0.123,.123,123.0,123.,0.02)指数形式指数形式如:如:123e-3,123E3注意:注意:e或或E之前必须有数字;之前必须有数字;e或或E之后必须为整数。之后必须为整数。例:不合法例:不合法e32.1e3.5.e3e2)实型常量的类型实型常量的类型一般双精度一般双精度double(8B)例:例:2.45678,4523.65可强制定义为可强制定义为float(4B)可在数后加可在数后加f或或F如:如:1.65f或或654.87F,目的:提高运算速度。目的:提高运算速度。也可强制定义为也可强制定义为longdouble(8B)可在数后加可在数后加l或或L如:如:1.65l或或654.87L有效位数3)实型数据内存的存放形式实型数据内存的存放形式(指数形式存放指数形式存放)符号位符号位有效位数有效位数(小数部分小数部分)有效数字有效数字,精度,精度指数部分指数部分指数位数指数位数,数值范围数值范围2.2.3字符常量字符常量1.普通的字符常量普通的字符常量用单引号括起来的一个字符用单引号括起来的一个字符字符常量字符常量,如:如:a?A2.转义字符常量转义字符常量(以以开头的字符序列开头的字符序列)如:如:n(换行换行)endl见表见表2.2例:例:1、101101=182+180=65查查ASCII码表,码表,A2、01212=181+280=10查查ASCII码表,码表,n3、x4242=4161+2160=66查查ASCII码表,码表,B小结:小结:1、整型类型、整型类型short2Bint4Blong4Bunsignedshort2Bunsignedint4Bunsignedlong4B2、整型常量表示方法、整型常量表示方法(3种种)(可看作的类型可看作的类型)(强制的类型强制的类型)3、实型类型、实型类型float4Bdouble8Blongdouble8B小结小结4、实型常量表示方法、实型常量表示方法(2种种)1)注意内存的存放方式注意内存的存放方式2)可看作的类型可看作的类型(强制的类型强制的类型)5、字符型类型、字符型类型char1Bunsignedchar1B6、字符型常量表示方法、字符型常量表示方法(2种种)3.字符数据在内存中的存储形式及其使用方法字符数据在内存中的存储形式及其使用方法1、存储形式:、存储形式:1)不是把单个字符放入内存单元,而是将该字符的不是把单个字符放入内存单元,而是将该字符的ASCII码码放入内存的存储单元。放入内存的存储单元。2)输出字符时,将输出字符时,将ASCII码转为字符。码转为字符。例:例:charc1;c1=a;在在C+中字符型数据和整型数据之间就可以通用。中字符型数据和整型数据之间就可以通用。例例2.1将字符赋给整型变量。将字符赋给整型变量。#include/包含头文件包含头文件iostream,预处理命令,预处理命令usingnamespacestd;/使用命名空间使用命名空间stdintmain()/主函数首部主函数首部/函数体开始函数体开始inti,j;/定义变量定义变量i=A;/赋值语句赋值语句j=B;/赋值语句赋值语句coutijn;/输出语句输出语句return0;/如程序正常结束,向操作系统返回一个零值如程序正常结束,向操作系统返回一个零值/函数结束函数结束运行结果:运行结果:6566可以看到:可以看到:在一定条件下,字符型数据和整型数据是可以通用的。在一定条件下,字符型数据和整型数据是可以通用的。但是应注意字符数据只占一个字节,但是应注意字符数据只占一个字节,它只能存放它只能存放0255范围内的整数。范围内的整数。(-128127)例例2.2字符数据与整数进行算术运算。字符数据与整数进行算术运算。下面程序的作用是将小写字母转换为大写字母。下面程序的作用是将小写字母转换为大写字母。#include/包含头文件包含头文件iostreamusingnamespacestd;/使用命名空间使用命名空间stdintmain()charc1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;coutc1c2endl;return0;运行结果为:AB4.字符串常量字符串常量1)用双撇号括起来的部分就是字符串常量。用双撇号括起来的部分就是字符串常量。如字符串常量:如字符串常量:abc,Hello!,a+b,Liping2)内存字节内存字节abc在内存中占在内存中占4个字节个字节(而不是而不是3个字节个字节)。编译系统会在字符串最后自动加一个编译系统会在字符串最后自动加一个0作为字符串作为字符串结束标志。结束标志。但但0并不是字符串的一部分,它只作为字符串并不是字符串的一部分,它只作为字符串的结束标志。的结束标志。有效字符与内存长度。有效字符与内存长度。例:例:coutabcendl;内存:内存:4B输出输出3个字符个字符abc,而不包括,而不包括0。3)字符串有结束标志字符串有结束标志(目的:判断字符串是否结束目的:判断字符串是否结束)结束标志为结束标志为0(空操作空操作)ASCII码码=0(非空格,空格非空格,空格ASCII码码=32)例:例:1)a2Ba1B所以:所以:aaa0注意:注意:(1)字符串常量字符串常量abcn包含几个字符包含几个字符?不是不是5个而是个而是4个字符,其中个字符,其中n是一个转义字符。是一个转义字符。但它在内存中占但它在内存中占5个字节个字节(包括一个包括一个0字符字符)。(2)abcn此时字符包括此时字符包括5个字符,即个字符,即a,b,c,n。(3)如果有以下输出语句:如果有以下输出语句:coutabcnendl;则会输出:则会输出:abc,然后换行。,然后换行。(4)如果有以下输出语句:如果有以下输出语句:coutIsayThankyou!n;则会输出是:则会输出是:IsayThankyou!(5)如果在一个字符串中最后一个字符为如果在一个字符串中最后一个字符为,则表示它是续行符,下一行的字符是该字符串的则表示它是续行符,下一行的字符是该字符串的一部分,且在两行字符串间无空格。一部分,且在两行字符串间无空格。如如:coutWemuststudyC+hard!;则输出则输出:WemuststudyC+hard!小结小结1、字符型类型、字符型类型char1Bunsignedchar1B2、字符型常量表示方法、字符型常量表示方法(2种种)3、字符型在、字符型在ASCII范围内可与整型通用范围内可与整型通用4、字符串常量、字符串常量(内存中有结束标志内存中有结束标志)内存长度内存长度(有效字符长度)有效字符长度)2.2.4符号常量符号常量-用一个标识符代表一个常量的,称为符号常量。用一个标识符代表一个常量的,称为符号常量。注意:注意:1)习惯上,符号常量用大写,变量用小写;习惯上,符号常量用大写,变量用小写;2)符号常量用符号常量用#define命令行定义命令行定义(命令行后无分号,因为:非语句命令行后无分号,因为:非语句)例例2.3求某一物体的总价钱。求某一物体的总价钱。设变量设变量-单价:单价:PRICE(字符常量字符常量)数量:数量:num总价:总价:total#definePRICE30/注意这不是语句,末尾不要加分号注意这不是语句,末尾不要加分号intmain()intnum,total;num=10;total=num*PRICE;couttotal=totalendl;return0;优点:优点:1)含义清楚含义清楚如:如:10,PRICE2)一改全改一改全改#definePRICE402.3变量变量2.3.1什么是变量什么是变量-其值可以改变的量称为变量其值可以改变的量称为变量变量名:变量的名字,有一个存储单元变量名:变量的名字,有一个存储单元(内存地址内存地址)变量值:在该存储单元存放变量的值变量值:在该存储单元存放变量的值使用变量时,须使用变量时,须定义定义初始化初始化如:如:inta;a=3;2.3.2变量名规则变量名规则(标识符标识符)标识符:有效的字符序列,或者说就是一个名字。标识符:有效的字符序列,或者说就是一个名字。可用来标识可用来标识-变量名,符号常量名,函数名,变量名,符号常量名,函数名,数组名,类型名,文件名数组名,类型名,文件名(源文件源文件)1)C+语言规定标识符只能由字母、数字和下划线三种语言规定标识符只能由字母、数字和下划线三种符号组成符号组成,且第一个字母必须为字母或下划线且第一个字母必须为字母或下划线(一般长度一般长度b2)注意:注意:大小写不同大小写不同例:例:sum和和Sum、SUM均为不同的变量。均为不同的变量。3)不能用不能用C+的关键字、系统函数名和类名。例:的关键字、系统函数名和类名。例:int(另:另:iCount,cSex(表示类型表示类型),iint,c-char)2.3.3定义变量定义变量1.C+,变量强制定义,变量强制定义(先定义,后使用先定义,后使用)目的:目的:1)未先定义的,不作为变量名未先定义的,不作为变量名例:例:intstudent;(编译出错编译出错)statent=30;2)每一变量,指定为确定类型,编译时则会分配相应每一变量,指定为确定类型,编译时则会分配相应的存储单元。的存储单元。例:整型变量和实型变量,分配的单元不同。例:整型变量和实型变量,分配的单元不同。2B或或4B4B或或8B3)每一变量属于一个类型,编译时检查运算是否合法。每一变量属于一个类型,编译时检查运算是否合法。例:例:inta,b;floata,b;求余求余a%b(合法合法)a%b(不合法不合法)如:如:4%34.3%3.12.定义变量的形式定义变量的形式定义变量的一般形式是定义变量的一般形式是:变量类型变量类型变量名表列;变量名表列;(shortint,int,longint,unsigned,float,double,char)1)变量名表列指的是一个或多个变量名的序列。变量名表列指的是一个或多个变量名的序列。例例:floata,b,c,d,e;注意注意:各变量间以逗号分隔,最后是分号。各变量间以逗号分隔,最后是分号。2)可以在定义变量时指定它的初值。可以在定义变量时指定它的初值。例例:floata=83.5,b,c=64.5,d=81.2,e;3)只要求在第一次使用该变量之前进行定义即可。也就只要求在第一次使用该变量之前进行定义即可。也就是说,它可以出现在语句的中间,如是说,它可以出现在语句的中间,如:inta;/定义变量定义变量a(在使用在使用a之前定义之前定义)a=3;/执行语句,对执行语句,对a赋值赋值floatb;/定义变量定义变量b(在使用在使用b之前定义之前定义)b=4.67;/执行语句,对执行语句,对b赋值赋值charc;/定义变量定义变量c(在使用在使用c之前定义之前定义)c=A;/执行语句执行语句,对,对c赋值赋值2.3.4为变量赋初值为变量赋初值1.变量初始化变量初始化允许在定义变量时对它赋予一个初值,这称为变量允许在定义变量时对它赋予一个初值,这称为变量初始化。初始化。初值可以是常量,也可以是一个有确定值的表达式。初值可以是常量,也可以是一个有确定值的表达式。例例:floata,b=5.78*3.5,c=2*sin(2.0);2.如果对变量未赋初值,则该变量的初值是一个不可预如果对变量未赋初值,则该变量的初值是一个不可预测的值,即该存储单元中当时的内容是不知道的。测的值,即该存储单元中当时的内容是不知道的。例:若未对例:若未对a和和b赋值,执行输出语句:赋值,执行输出语句:coutabcendl;输出结果可能为输出结果可能为1.48544e-38151.81858(各次运行情况可能不同各次运行情况可能不同)3.初始化不是在编译阶段完成的。初始化不是在编译阶段完成的。(只有在第只有在第4章中介绍的静态存储变量和外部变量的初章中介绍的静态存储变量和外部变量的初始化是在编译阶段完成的始化是在编译阶段完成的)而是在程序运行时执行本函数时赋予初值的,相当于执而是在程序运行时执行本函数时赋予初值的,相当于执行一个赋值语句。行一个赋值语句。例例:inta=3;相当于以下两个语句相当于以下两个语句:inta;/指定为整型变量指定为整型变量a=3;/赋值语句,将赋给赋值语句,将赋给4.对多个变量赋予同一初值,必须分别指定,不能写成对多个变量赋予同一初值,必须分别指定,不能写成:floata=b=c=4.5;而应写成而应写成floata=4.5,b=4.5,c=4.5;或或floata,b,c=4.5;a=b=c;(原因)原因)2.3.5常变量常变量1.常变量常变量(constantvariable)在定义变量时,如果加上关键字在定义变量时,如果加上关键字const,则变量的值,则变量的值在程序运行期间不能改变,这种变量称为常变量。在程序运行期间不能改变,这种变量称为常变量。例如:例如:constinta=3;constintb=3+6,c=3*cos(1.5);1)在定义常变量时必须同时对它初始化在定义常变量时必须同时对它初始化(即指定其值即指定其值),此后它的值不能再改变。此后它的值不能再改变。2)常变量不能出现在赋值号的左边。常变量不能出现在赋值号的左边。(只读内存只读内存)例:例:constinta;a=3;/常变量不能被赋值常变量不能被赋值3)constintb=3+6,c=3*cos(1.5);注意:系统标准数学函数注意:系统标准数学函数cos,本程序单位的开头加上以下本程序单位的开头加上以下#include命令:命令:#include或或#include4)常变量:又称为只读变量常变量:又称为只读变量(read-only-variable)。5)区别用区别用#define命令定义的符号常量命令定义的符号常量用用const定义的常变量。定义的常变量。符号常量只是用一个符号代替一个字符串。符号常量只是用一个符号代替一个字符串。预编译,把所有符号常量替换为所指定的字符串。预编译,把所有符号常量替换为所指定的字符串。无类型,无存无类型,无存储单元。储单元。常变量具有变量的特征。常变量具有变量的特征。有类型,编译在内存中存在着存储单元,有类型,编译在内存中存在着存储单元,可用可用sizeof运算符测出其长度。运算符测出其长度。与一般变量惟一的不同是指定变量的值不能改变。与一般变量惟一的不同是指定变量的值不能改变。例:例:floata;coutsizeof(a)(14)下标运算符下标运算符()(15)其他其他(如函数调用运算符如函数调用运算符()2.5算术运算符和算术表达式算术运算符和算术表达式2.5.1基本的算术运算符基本的算术运算符注意:注意:1)两个整数相除的结果为整数两个整数相除的结果为整数例:例:5/3结果为结果为1-5/3结果为结果为-1(原则:向零取整原则:向零取整)2)运算中有一个数为实数,则结果为运算中有一个数为实数,则结果为double型。型。2.5.2算术表达式和运算符的优先级与结合性算术表达式和运算符的优先级与结合性1.算术表达式算术表达式用算术运算符和括号将运算对象连接起来的、符合用算术运算符和括号将运算对象连接起来的、符合C+语法规则的式子,称算术表达式。语法规则的式子,称算术表达式。2.运算对象运算对象(操作数操作数)常量常量变量变量函数函数例:例:inta,b,c;floatd,e;a*b/c-1.5+a合法算术表达式合法算术表达式a+b+d%e不合法算术表达式不合法算术表达式3.运算符的优先级与结合性运算符的优先级与结合性优先级:优先级:()*,/,%+,-高高低低结合性:结合性:自左向右自左向右例:例:inta=1,b=2,c=3;表达式:表达式:a*b/c-1.5+a2/3-1.5+a0-1.5+a-1.5+9795.5(double)2.5.3表达式中各类数值型数据间的混合运算表达式中各类数值型数据间的混合运算1.1)整型整型(int,short,long,unsigned)实型实型(float,double可以混合运算可以混合运算字符字符型型(char,unsignedchar)2)运算时,先转换为同一类型,再运算。运算时,先转换为同一类型,再运算。如:如:10+a+1.5-8765.1234b2.转换规则:转换规则:低级向高级转换,低级向高级转换,结果为高级类型。结果为高级类型。例例1:10+2.8=12.8intdoubledouble例例2:inti;floatf;doubled;longe;表达式表达式10+a+if-d/eintdoubledoubledoubledouble注意:类型转换是系统自动进行的。注意:类型转换是系统自动进行的。2.5.4自增、自减运算符自增、自减运算符1)运算符:运算符:+-作用:使变量的值增作用:使变量的值增1或或减减1例:例:+i,-ii+,i-(i+相当于相当于i=i+1)2)优先级优先级()+,-(后置后置)+,-(前置前置)*,/,%高高低低3)结合性结合性后置后置:自左向右自左向右,前置前置:自右向左自右向左说明:说明:1)+i,-i先增或减,才使用先增或减,才使用i2)i+,i-先用先用i,然后自增自减然后自增自减例例1:inti=3;cout+iendl;先增:先增:i=4输出:输出:i=4inti=3;couti+endl;先用:输出先用:输出i=3再增:再增:i=4例例2:inti;i=3;cout-i+endl;分析:分析:1)-,+优先级优先级2)用括号将优先级标出:用括号将优先级标出:-(i+)3)先用:先用:输出输出-3再增:再增:i=4注意:注意:1)+,-常用于常用于循环语句循环语句指针变量指针变量2)用于其它地方,易出错,慎用。用于其它地方,易出错,慎用。有关有关+,-表达式使用中的问题说明表达式使用中的问题说明:1)C+运算符和表达式使用灵活,小心谨慎。运算符和表达式使用灵活,小心谨慎。例:例:i=3;(i+)+(i+)+(i+)系统是:先用,系统是:先用,后增后增3+3+3i6如果:编程者想得到如果:编程者想得到12,应:,应:i=3;a=i+;b=i+;c=i+;d=a+b+c;2)结合性问题结合性问题如:如:i+ji+(+j)(i+)+j注意:应避免此类含糊的表达式。注意:应避免此类含糊的表达式。3)其它误区其它误区例:例:i=3;couti,i+;尽量不这样编程。尽量不这样编程。结果:结果:4,3j=i+1;couti,j;好的编程好的编程结果:结果:3,42.5.5强制类型转换运算符强制类型转换运算符1)目的:目的:可利用强制类型转换运算符将一个表达式可利用强制类型转换运算符将一个表达式转换成所需的类型。转换成所需的类型。2)一般形式一般形式(类型名类型名)(表达式表达式)注意:两个括号都应存在。注意:两个括号都应存在。例:例:(int)(x+y)两个括号省略的情况:只能省略其中的一个。两个括号省略的情况:只能省略其中的一个。第一个括号可省略,表达式是变量。第一个括号可省略,表达式是变量。例:例:(int)x+y第二个括号可省略,第二个括号可省略,C+也允许,但不主张。也允许,但不主张。例:例:(int)x或或int(x+y)类型转换:类型转换:自动类型转换自动类型转换强制类型转换强制类型转换例:例:floata;a%3不合法不合法(int)a%3合法合法例例2.4强制类型转换。强制类型转换。#includeusingnamespacestd;intmain()floatx;inti;x=3.6;i=(int)x;coutx=x,i=iendl;return0;运行结果如下:运行结果如下:3.6,i=32.6赋值运算符和赋值表达式赋值运算符和赋值表达式2.6.1赋值运算符赋值运算符赋值符号赋值符号=就是赋值运算符就是赋值运算符2.6.2赋值过程中类型转换赋值过程中类型转换赋值运算符两侧不一样,要类型转换。赋值运算符两侧不一样,要类型转换。转换规则:转换规则:1)实型实型整型整型方法:方法:舍弃小数舍弃小数(不四舍五入不四舍五入)例例:inti;i=3.56;i的内存放的内存放32)整型整型实型实型方法:值不变,但浮点表示,并补足有效位数。方法:值不变,但浮点表示,并补足有效位数。例:例:floatf;doublef;f=23;f=23;内存:内存:23.00000内存:内存:23.0000000000000(7位有效位数位有效位数)14个个0(若若16位位有效位数有效位数)13个个0(若若15位位有效位数有效位数)3)doublefloatfloatdouble方法:截取前方法:截取前7位有效数字位有效数字扩展有效数字至扩展有效数字至16(15)位位例:例:floatf:doubled=123.456789e100;溢出溢出f=d;注意溢出问题4)char整型整型(1B)(2B,4B,4B)方法:方法:“符号扩展符号扩展”高位为高位为0,则补,则补0高位为高位为1,则补,则补1名词:名词:“高高8位位”,“低低8位位”例例charc=376;shorti;i=c;coutiendl;5)intshortcharlong方法:截取低方法:截取低8位。位。例:例:shorti=289;charc;c=i;!coutcendl;6)intunsignedint(长度相同)(长度相同)shortunsignedshortlongunsignedlong方法:方法:“原样照赋原样照赋”例例2.5unsignedshorta;shortb=-1;a=b;coutaendl;补充补充7)shortint,long例:例:方法:方法:“符号扩展符号扩展”shorta=-1;intb;b=a;coutbendl;int,longshort例例1:方法:截取方法:截取intb=8;shorta;a=b;coutaendl;例例2:intb=65536intb=65536;shortashorta;a=ba=b;coutaendlcoutaendl;补充补充8、unsignedshortint,long方法:方法:“高位补高位补0”(符号统一,保持正数符号统一,保持正数)例:例:unsignedshorta=65535;intb;b=a;coutbendl;unsignedintintunsignedshortshortunsignedlonglong方法:方法:“原样照赋原样照赋”例:例:b=-1unsignedshorta=65535;shortb;b=a;coutbendl;实型实型整型整型舍弃小数舍弃小数(有可能溢出有可能溢出)整型整型实型实型补足有效位数补足有效位数doublefloatfloatdouble截取前截取前7位有效数据位有效数据(有可能溢出有可能溢出)有效位数扩展到有效位数扩展到1616位位char 整型整型符号扩展符号扩展整型整型 char截取低截取低8位位(有可能溢出有可能溢出)shortint,longlong,intshort符号扩展符号扩展截取截取(有可能溢出有可能溢出)unsignedshortint,longunsignedintintunsignedshortshortunsignedlonglong高位补高位补0原样照赋原样照赋(有可能溢出有可能溢出)intunsignedintshortunsignedshortlongunsignedlong原样照赋原样照赋(有可能溢出有可能溢出)2.6.3复合的赋值运算符复合的赋值运算符1)定义定义:在赋值号之前加上其它运算符。在赋值号之前加上其它运算符。例:例:如何理解?如何理解?例:例:2)10种复合赋值运算符种复合赋值运算符3)目的目的简化程序简化程序有利于编译有利于编译2.6.4赋值表达式赋值表达式1)定义:定义:由赋值运算符将一个变量和一个表达式连接起来的式子。由赋值运算符将一个变量和一个表达式连接起来的式子。(=和和+=,-=等等复合赋值运算符复合赋值运算符)2)一般形式一般形式:例:例:a=53)求解过程求解过程4)赋值运算符及复合赋值运算符的优先级与结合性赋值运算符及复合赋值运算符的优先级与结合性优先级优先级:倒数第二。:倒数第二。结合性:自右向左结合性:自右向左例例1:a=b=5分析:分析:a=(b=5)(先根据优先级打括号先根据优先级打括号)结果:结果:b=5,a=5,表达式的值也是表达式的值也是5例例2:例例3:分析:第一步分析:第一步a=a-a*a,a=-132,表达式表达式-132第二步第二步a=a+(-132),a=-264,表达式表达式-264例例4:a=3;cout(b=a)endl;couta=bendl;(出错出错)(没有括号没有括号)couta=b;5)赋值表达式与赋值语句赋值表达式与赋值语句例:例:a=5赋值表达式赋值表达式a=5;赋值语句赋值语句小结:小结:1、算术运算符和算术表达式、算术运算符和算术表达式1)+,-,*,/,%2)结合性和优先级结合性和优先级3)注意:注意:/和和%2、表达式中各类数值之间的自动类型转换、表达式中各类数值之间的自动类型转换(图图2.7)3、自增、自增+,自减自减1)优先级优先级(后置和前置后置和前置)2)结合性结合性(后置后置:自左向右自左向右,前置前置:自右向左自右向左)3)前置,先增后用;后置,先用后增前置,先增后用;后置,先用后增小结:小结:4、强制类型转换、强制类型转换(int)(x+y)%35、赋值运算符、赋值运算符6、赋值过程中类型转换、赋值过程中类型转换(自动自动)(左边变量和右边表达式不同类型时左边变量和右边表达式不同类型时)注意溢出问题注意溢出问题cout输出时输出时7、赋值与复合赋值运算符、赋值与复合赋值运算符优先性与结合性优先性与结合性8、赋值表达式与赋值语句、赋值表达式与赋值语句实型实型整型整型舍弃小数舍弃小数(有可能溢出有可能溢出)整型整型实型实型补足有效位数补足有效位数doublefloatfloatdouble截取前截取前7位有效数据位有效数据(有可能溢出有可能溢出)有效位数扩展到有效位数扩展到1616位位char 整型整型符号扩展符号扩展整型整型 char截取低截取低8位位(有可能溢出有可能溢出)shortint,longlong,intshort符号扩展符号扩展截取截取(有可能溢出有可能溢出)unsignedshortint,longunsignedintintunsignedshortshortunsignedlonglong高位补高位补0原样照赋原样照赋(有可能溢出有可能溢出)intunsignedintshortunsignedshortlongunsignedlong原样照赋原样照赋(有可能溢出有可能溢出)2.7逗号运算符与逗号表达式逗号运算符与逗号表达式1、定义、定义用逗号将两个表达式连接起来。用逗号将两个表达式连接起来。例:例:3+5,6+82、一般形式:、一般形式:3、求解过程:、求解过程:例例1:3+5,6+8表达式的值:表达式的值:14例例2:结果:结果:a=15表达式的值:表达式的值:60例例3:第一步第一步a=15,表达式的值:表达式的值:60第二步第二步表达式的值:表达式的值:204、扩展的一般形式:、扩展的一般形式:5、逗号表达式的优先级及结合性、逗号表达式的优先级及结合性优先级:最低级优先级:最低级结合性:自左向右结合性:自左向右例:例:例:例:cout(3*5,43-6*5,67/3)endl;注意:注意:输出表达式时,表达式一定用输出表达式时,表达式一定用()括起来。括起来。小结:小结:1、逗号运算符与逗号表达式、逗号运算符与逗号表达式顺序求值顺序求值cout输出时输出时优先性与结合性优先性与结合性练习:练习:C+C+