《《吉大康辉老师讲C语言》第三章:C语言中的运算.ppt》由会员分享,可在线阅读,更多相关《《吉大康辉老师讲C语言》第三章:C语言中的运算.ppt(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章第三章 运算运算3.1运算符简介运算符简介语言的运算符有以下几类:语言的运算符有以下几类:语言的运算符有以下几类:语言的运算符有以下几类:1.1.算术运算符算术运算符算术运算符算术运算符 (见下节)(见下节)(见下节)(见下节)2.2.关系运算符关系运算符关系运算符关系运算符 =-9.9.求字节数符求字节数符求字节数符求字节数符sizeof 12 sizeof 12 其它其它其它其它 ()()3.2 算术运算符和算术表达式算术运算符和算术表达式基本的算术运算符基本的算术运算符基本的算术运算符基本的算术运算符:+(二元加运算符)(二元加运算符)(二元加运算符)(二元加运算符)-(二元减,或
2、一元负运算符)(二元减,或一元负运算符)(二元减,或一元负运算符)(二元减,或一元负运算符)*(乘法运算符)(乘法运算符)(乘法运算符)(乘法运算符)/(除法运算符)(除法运算符)(除法运算符)(除法运算符)当当当当进进进进行行行行+、-、*、/混混混混合合合合运运运运算算算算时时时时,各各各各运运运运算算算算符符符符之之之之间间间间必必必必须须须须要要要要有有有有一一一一定定定定的的的的优优优优先先先先次次次次序序序序和和和和结结结结合合合合方方方方向向向向。语语语语言言言言中中中中规规规规定定定定+、-、*、/之之之之间间间间的的的的优优优优先次序如下:先次序如下:先次序如下:先次序如下:
3、-、*/*/、+-+-。同同同同一一一一行行行行运运运运算算算算符符符符的的的的优优优优先先先先级级级级相相相相等等等等,运运运运算算算算时时时时按按按按优优优优先先先先级级级级从从从从高高高高到到到到低低低低,同同同同级级级级从从从从左左左左至至至至右右右右的的的的原原原原则则则则进进进进行行行行,如如如如:a*b+c/d-ea*b+c/d-e、(a*b)+(c/d)-e(a*b)+(c/d)-e、a*b/ca*b/c、a*-c+b/d a*-c+b/d a a,b b,c c,d d,e e等等等等称称称称为为为为操操操操作作作作数数数数,它它它它可可可可以以以以是是是是常常常常量量量量或
4、或或或变变变变量量量量,由由由由操操操操作作作作数数数数和和和和运运运运算算算算符符符符以以以以及及及及圆圆圆圆括括括括号号号号按按按按一一一一定定定定规规规规则则则则构构构构成成成成的的的的式式式式子子子子称称称称为为为为表表表表达达达达式式式式。由数值型操作数和算术运算符构成的表达式称为由数值型操作数和算术运算符构成的表达式称为由数值型操作数和算术运算符构成的表达式称为由数值型操作数和算术运算符构成的表达式称为算术表达式算术表达式算术表达式算术表达式。模运算符模运算符模运算符模运算符模运算符是一个二元运算符。模运算符是一个二元运算符。模运算符是一个二元运算符。模运算符是一个二元运算符。优先
5、级和结合方向同优先级和结合方向同优先级和结合方向同优先级和结合方向同*和和和和/。要要要要求求求求两两两两侧侧侧侧的的的的操操操操作作作作数数数数均均均均为为为为整整整整型型型型数数数数据据据据。且且且且n nmm的的的的结结结结果果果果为为为为n/mn/m的余数部分,即的余数部分,即的余数部分,即的余数部分,即n n被被被被mm除的余数。除的余数。除的余数。除的余数。余余余余数数数数的的的的符符符符号号号号与与与与被被被被除除除除数数数数一一一一致致致致。如如如如:7 73 3的的的的结结结结果果果果为为为为1 1,4 42 2的的的的结结结结果果果果为为为为0 0,2 23 3的的的的结结
6、结结果果果果为为为为2 2,-2%3=-2%3=?2%-3=2%-3=?-2%-3=-2%-3=?。?。?。?。3.2 算术运算符和算术表达式算术运算符和算术表达式3.3赋值运算符和赋值表达式赋值运算符和赋值表达式赋赋赋赋值值值值运运运运算算算算符符符符=:一一一一个个个个二二二二元元元元运运运运算算算算符符符符,其其其其左左左左操操操操作作作作数数数数只只只只能能能能为变量,而右操作数可以为常量、变量或表达式。为变量,而右操作数可以为常量、变量或表达式。为变量,而右操作数可以为常量、变量或表达式。为变量,而右操作数可以为常量、变量或表达式。赋值表达式的一般形式为:赋值表达式的一般形式为:赋值
7、表达式的一般形式为:赋值表达式的一般形式为:=先对先对先对先对“=”“=”右端表达式求值,将结果赋给变量。右端表达式求值,将结果赋给变量。右端表达式求值,将结果赋给变量。右端表达式求值,将结果赋给变量。赋赋赋赋值值值值表表表表达达达达式式式式可可可可以以以以出出出出现现现现在在在在其其其其他他他他表表表表达达达达式式式式中中中中:(a=1)+(b=3)*4-(a=1)+(b=3)*4-(c=5)(c=5)赋值表达式右侧也可以是一个赋值表达式赋值表达式右侧也可以是一个赋值表达式赋值表达式右侧也可以是一个赋值表达式赋值表达式右侧也可以是一个赋值表达式:a=(b=5):a=(b=5)赋值表达式中赋值
8、表达式中赋值表达式中赋值表达式中“=”“=”的结合顺序是的结合顺序是的结合顺序是的结合顺序是“从右至左从右至左从右至左从右至左”。算术运算符的优先级高于赋值运算符。例如:算术运算符的优先级高于赋值运算符。例如:算术运算符的优先级高于赋值运算符。例如:算术运算符的优先级高于赋值运算符。例如:a=b=c=d=1a=b=c=d=1,a=5+(b=3),a=(b=4)+(c=6),a=b=4+(c=6)a=5+(b=3),a=(b=4)+(c=6),a=b=4+(c=6)复复复复合合合合的的的的赋赋赋赋值值值值运运运运算算算算符符符符:a a+=+=b b,a a-=-=b b,a a*=*=b b,
9、a a/=/=b b,a a%=%=b b3.4,运算符,运算符算算算算术术术术运运运运算算算算符符符符+和和和和-使使使使参参参参加加加加运运运运算算算算对对对对象象象象的的的的值值值值增增增增1 1或或或或减减减减1 1,也是赋值运算。也是赋值运算。也是赋值运算。也是赋值运算。单单单单目目目目运运运运算算算算符符符符,运运运运算算算算对对对对象象象象可可可可以以以以是是是是整整整整型型型型或或或或实实实实型型型型变变变变量量量量,不不不不能能能能是是是是常常常常量量量量 或或或或 表表表表 达达达达 式式式式,例例例例 如如如如:+a+a,a+a+,a-a-,-a-a,+3+3,(i+ji
10、+j)-它们在算术运算符中的优先级和结合方向如下:它们在算术运算符中的优先级和结合方向如下:它们在算术运算符中的优先级和结合方向如下:它们在算术运算符中的优先级和结合方向如下:+-+-(一元负)从右至左(一元负)从右至左(一元负)从右至左(一元负)从右至左 */%*/%从左至右从左至右从左至右从左至右 +-+-(二元减)从左至右(二元减)从左至右(二元减)从左至右(二元减)从左至右其其其其构构构构成成成成形形形形式式式式有有有有如如如如下下下下四四四四种种种种:前前前前缀缀缀缀(+a+a、-a-a),后后后后缀缀缀缀(a+a+、a-a-),运算后),运算后),运算后),运算后a a的值相同,表
11、达式的值不同。的值相同,表达式的值不同。的值相同,表达式的值不同。的值相同,表达式的值不同。main()main()int a=1,b=1;int a=1,b=1;printf(“+a=%d,b+=%dn”,+a,b+);printf(“+a=%d,b+=%dn”,+a,b+);printf(“a=%d,b=%dn”,a,b);printf(“a=%d,b=%dn”,a,b);printf(“-a=%d,b-=%dn”,-a,b-);printf(“-a=%d,b-=%dn”,-a,b-);printf(“a=%d,b=%dn”,a,b);printf(“a=%d,b=%dn”,a,b);运行
12、结果:运行结果:运行结果:运行结果:考考考考虑虑虑虑:i i的的的的初初初初值值值值为为为为3 3,表表表表达达达达式式式式(i+*+i+i-*-ii+*+i+i-*-i)=?3.4,运算符,运算符3.5 混合运算和类型转换混合运算和类型转换当运算符两边的操作数类型不同时,其中一个操作数就要经当运算符两边的操作数类型不同时,其中一个操作数就要经当运算符两边的操作数类型不同时,其中一个操作数就要经当运算符两边的操作数类型不同时,其中一个操作数就要经过类型转换以和另一个操作数的类型相一致,然后才能进行过类型转换以和另一个操作数的类型相一致,然后才能进行过类型转换以和另一个操作数的类型相一致,然后才
13、能进行过类型转换以和另一个操作数的类型相一致,然后才能进行运算。运算。运算。运算。变换操作数采取变换操作数采取变换操作数采取变换操作数采取就高不就低就高不就低就高不就低就高不就低的原则。即级别低的操作数先被的原则。即级别低的操作数先被的原则。即级别低的操作数先被的原则。即级别低的操作数先被转换成和级别高的操作数具有同一类型,然后再进行运算,转换成和级别高的操作数具有同一类型,然后再进行运算,转换成和级别高的操作数具有同一类型,然后再进行运算,转换成和级别高的操作数具有同一类型,然后再进行运算,结果的数据类型和级别高的操作数相同。各种类型级别的高结果的数据类型和级别高的操作数相同。各种类型级别的
14、高结果的数据类型和级别高的操作数相同。各种类型级别的高结果的数据类型和级别高的操作数相同。各种类型级别的高低如下所示:低如下所示:低如下所示:低如下所示:高高高高 double float double float long long unsigend unsigend 低低低低 int char,short int char,short例如:例如:例如:例如:10+a+5*1.5-10/310+a+5*1.5-10/3强制类型转换表达式:强制类型转换表达式:强制类型转换表达式:强制类型转换表达式:(类型类型类型类型)表达式表达式表达式表达式)例如:例如:例如:例如:(int)(1.5+2.3
15、)=?,(int)1.5+2.3=?(int)(1.5+2.3)=?,(int)1.5+2.3=?类型转换也发生在赋值运算符的两边,且不管赋值类型转换也发生在赋值运算符的两边,且不管赋值类型转换也发生在赋值运算符的两边,且不管赋值类型转换也发生在赋值运算符的两边,且不管赋值运算符右边表达式的结果类型为何,一律转换为左运算符右边表达式的结果类型为何,一律转换为左运算符右边表达式的结果类型为何,一律转换为左运算符右边表达式的结果类型为何,一律转换为左边变量的类型,然后再赋给左边的变量。边变量的类型,然后再赋给左边的变量。边变量的类型,然后再赋给左边的变量。边变量的类型,然后再赋给左边的变量。类型的
16、提升类型的提升类型的提升类型的提升:是将较低级的类型转换为较高级的类型是将较低级的类型转换为较高级的类型是将较低级的类型转换为较高级的类型是将较低级的类型转换为较高级的类型,通过增加一些二进制位来完成通过增加一些二进制位来完成通过增加一些二进制位来完成通过增加一些二进制位来完成,精度没有损失。精度没有损失。精度没有损失。精度没有损失。类型的下降类型的下降类型的下降类型的下降:是将较高级的类型转换为较低级的类型是将较高级的类型转换为较低级的类型是将较高级的类型转换为较低级的类型是将较高级的类型转换为较低级的类型,要截断和舍入二进制位,通常会引起精度的损失。要截断和舍入二进制位,通常会引起精度的损
17、失。要截断和舍入二进制位,通常会引起精度的损失。要截断和舍入二进制位,通常会引起精度的损失。3.5 混合运算和类型转换混合运算和类型转换main()main()char c1,c2,c3;char c1,c2,c3;int i1,i2,i3;int i1,i2,i3;float f1,f2,f3;float f1,f2,f3;c1=x;c2=1000;c3=6.02e23;c1=x;c2=1000;c3=6.02e23;printf(“%c%c%cn”,c1,c2,c3);printf(“%c%c%cn”,c1,c2,c3);i1=x;i2=1000;i3=6.02e23;i1=x;i2=10
18、00;i3=6.02e23;printf(“%d%d%dn”,i1,i2,i3);printf(“%d%d%dn”,i1,i2,i3);f1=x;f2=1000;f3=6.02e23;f1=x;f2=1000;f3=6.02e23;printf(“%f%f%fn”,f1 printf(“%f%f%fn”,f1,f2,f3);,f2,f3);运行结果为:运行结果为:运行结果为:运行结果为:3.5 混合运算和类型转换混合运算和类型转换3.6 逗号运算符和逗号表达式逗号运算符和逗号表达式逗号表达式的构成形式如下:逗号表达式的构成形式如下:逗号表达式的构成形式如下:逗号表达式的构成形式如下:表达式表达
19、式表达式表达式1 1,表达式,表达式,表达式,表达式2 2,表达式,表达式,表达式,表达式n n将多个表达式连接起来构成逗号表达式。将多个表达式连接起来构成逗号表达式。将多个表达式连接起来构成逗号表达式。将多个表达式连接起来构成逗号表达式。逗号表达式的求解过程是:先求解表达式逗号表达式的求解过程是:先求解表达式逗号表达式的求解过程是:先求解表达式逗号表达式的求解过程是:先求解表达式1 1,再求解表达,再求解表达,再求解表达,再求解表达式式式式2 2,最后求解表达式,最后求解表达式,最后求解表达式,最后求解表达式n n,且表达式,且表达式,且表达式,且表达式n n的值就是该逗号表达的值就是该逗号表达的值就是该逗号表达的值就是该逗号表达式的值。式的值。式的值。式的值。逗号表达式的结合顺序:自左向右。逗号表达式的结合顺序:自左向右。逗号表达式的结合顺序:自左向右。逗号表达式的结合顺序:自左向右。逗号运算符的优先级在所有运算符中是最低的。逗号运算符的优先级在所有运算符中是最低的。逗号运算符的优先级在所有运算符中是最低的。逗号运算符的优先级在所有运算符中是最低的。例如:例如:例如:例如:a=a=(3+53+5,3*53*5,5/35/3)a=3+5 a=3+5,3*53*5,5/35/3 (i=3i=3,i+i+,+i+i,i+5i+5)
限制150内