资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Program Design in Visual C+,PROGRAM DESIGN IN Visual C+,李骏扬,Jupiter,第二讲,VC+,运算符 表达式 输入输出,VC+,运算符 表达式,表达式,表达式能够求出一个式子的值,例如:,3+3,,,iA,*,iB,,,fAllMoney,=,iPersonCount,*,fMoney,表达式由若干变量、常量和运算符组成。,运算符,算术运算符:,+-*/%,关系运算符:,=&|,递增运算符:,+-,sizeof,赋值运算符:,=+=/=*=%=,三目运算符:,?:,逗号运算符:,赋值运算和赋值符号“,=”,有赋值符号“,=”,的表达式叫做赋值表达式。,赋值表达式是将“,=”,右边的值传递给“,=”,左边的变量。,赋值符号左边必须是一个变量,右边是一个运算式。,赋值符号并,不是,表示左右相等关系。,赋值运算的结果就是左边变量的结果。,赋值符号“,=”,的运用举例,int,iA,=3;,iB,=4;int,iC,=,iA,+,iB,;,cout,“,iC,=“,iC,;,iIndex,=,iIndex,+1,符号运算表达式,-,负号,+,正号(一般省略),例如:,int,iA,=+3;,int iA0=3;,int,iB,=-4;,int,iC,=-22;,算术运算表达式,+,:加号,int,iA,=4;,iB,=5;,iC,=0;,iC,=,iA,+,iB,;,cout,iC,;,int,iA,=4;,iB,=5;int,iC,=,iA,+,iB,;,cout,iC,;,算术运算表达式,-,减号,iC,=,iA,iB,;,*,乘号,iC,=,iA,*,iB,;,/,除号,iC,=,iA,/,iB,;,%,取模,/,取余数,7%3=1,11%4=3,int,iA,=43;int,iB,=10;int,iC,=,iA,/,iB,;,cout,iC,;,输出:,3,算术运算表达式,对于,char,的算术运算,规律两条:,在进行算术运算时,,char,类型相当于一个整数,范围,-128127,,,unsigned char,的范围是,0255,在用,cout,输出时,显示在屏幕上的是,ASCII,字符,char,cExample,=68;,cout,cExample,;,输出:,D,char,类型运算的举例,#include,void,main(void,),char,cA,=A,cB,=0;,cA,=,cA,+3;,char,cC,=,cA,+,cB,;,int,iA,=,cA,;,int,iB,=,cB,;,int,iC,=,cC,;,cout,iA,iB,iC,endl,;,cout,cA,cB,cC,c&c+,(书后习题),为了应付考试,我们必须学会分析垃圾表达式,但是不建议大家在实际操作中使用垃圾表达式。,算术运算符操作数的类型,相同类型数据运算,char,char,char,int,int,int,float,float,float,double,double,double,算术运算符操作数的类型,不相同类型数据运算,charint,int,intfloat,float,intdouble,double,floatdouble,double,赋值时的自动类型转换,赋值时,计算所得值将自动更改与赋值符号左边的变量类型,长类型,短类型,浮点数,整数:去掉小数部分。如果原浮点数超出了整数的取值范围,则出错。,长整数,短整数:若超出短整数的范围,出错。若是负数,最高位符号保留。,赋值时的自动类型转换,短类型,长类型,整数,浮点数:没有问题。,短整数,长整数,:需要高位补足,方法是,用短整数的最高位来补足,,以正确转换负数。,无符号数,与有符号数,一般没有问题。,当超出表示范围,会出错。,类型转换对数值带来的影响,遵循尽量不改变原数值得原则,特别注意转换前后数值精度的变化,当原数的大小超出转换后数据类型的表示范围,则转换后数据有误。,表示长度带来的溢出。,有无符号带来的溢出。,算术运算的溢出问题,因为相同类型的变量运算后仍然是该类型,所以可能导致溢出。,例如:,int,iA,=20000;int,iB,=300;int,iC,=,iA,*,iB,/,溢出,又如:,char,cA,=200;char,cB,=100;,int,iC,=,cA,+,cB,/,溢出!,解决溢出的方法,强行类型转换,语法:,(),或:,(),转换方法和规则同自动转换相同,例如:,int,iA,=3,iB,=4;float,iC,=(,float)iA,/,iB,;,强行类型转换解决溢出问题,_int8 iA8=200;,_int8 iB8=100;,_int16 iC16=(_int16)iA8*iB8;,强行类型转换解决精度问题,整除:,int,iA,=3,iB,=4;,cout,iA,/,iB,endl,;,结果:,0,整数和整数的除法要得到小数,cout,(,float)iA,/,iB,endl,;,结果:,0.75,赋值运算表达式,=,赋值,+=A+=B,相当于,A=A+B,=A=B,相当于,A=A B,*,=A,*,=B,相当于,A=A,*,B,/,=A,/,=B,相当于,A=A,/,B,运算符的元,/,目,元,/,目:对于一个运算符,参与运算的参数的个数。,+/-,号:一元运算符,+-*/%,:二元运算符,赋值运算表达式,所有的赋值运算符都是左结合的,赋值表达式的运算结果就执行赋值后是赋值运算符左边变量的值。,例如:执行,iA,=,iB,=,iC,由于“,=,”是左结合的,先运算,iB,=,iC,,于是将,iC,赋值给,iB,然后将,iB,=,iC,的运算结果,(,即,iB,),赋值给,iA,赋值表达运算式举例,a=2,b=3,计算,a+=b+=a*=b,a*=b,:,a,6,,结果,6,b+=(a*=b),:,b 9,,结果,9,a+=(,b+=a*=b,)a 15,,结果,15,关系运表达式,小于,大于,=,大于等于,=,等于,!=,不等于,关系运算的结果,对于,char,类型,看作是数字进行比较。,如果关系式是成立的,运算结果是,1,。,如果关系式不成立,运算结果是,0,。,例如:,iE,=(a=A),运算结果:,iE,=0,iA,=3;,iB,=5;,iE,=(,iB,=,iA,),运算结果:,iE,=1,浮点数的等值比较,由于浮点数,(float,double),在计算中的表示有一个精度问题,所以经过一系列运算,可能理论值是,1,,但实际结果可能是,0.999999,和,1.000001,,在比较,fA,和,fB,时,可以使用,fabs(fA,-,fB,)BC”,:,A B&B C,表示,B,在,(A,C),区间之外:,B=C|B=A,表示,A,B,:,A!=B,或者,!(A=B),二进制位操作,按位取反,一元,右移,二元,&,按位与,二元,|,按位或,二元,按位异或,二元,位运算的说明,位运算只能在整数间进行,移位操作实现快速乘法和除法,sizeof,运算符,语法,sizeof(),求使用内存的大小,例如:,int,iA,=0;,cout,sizeof(iA,);,结果:,4,递加、递减运算符,+,iA,+,相当于,iA,=,iA,+1,-,iA,-,相当于,iA,=,iA,1,都是一元左结合运算符,+,和,-,运算符的特别说明,逗号表达式,
展开阅读全文