《运算符和表达式》由会员分享,可在线阅读,更多相关《运算符和表达式(35页珍藏版)》请在金锄头文库上搜索。
1、第第3章章 运算符和表达式运算符和表达式第第3章章 运算符和表达式运算符和表达式v3.1 3.1 算术表达式算术表达式算术表达式算术表达式 v3.2 3.2 赋值表达式赋值表达式赋值表达式赋值表达式 v3.3 3.3 关系表达式关系表达式关系表达式关系表达式 v3.4 3.4 逻辑表达式逻辑表达式逻辑表达式逻辑表达式 v3.5 3.5 条件表达式条件表达式条件表达式条件表达式v3.6 3.6 逗号表达式逗号表达式逗号表达式逗号表达式v3.7 3.7 多种类型混合运算多种类型混合运算多种类型混合运算多种类型混合运算 学习目标学习目标 v学会使用常用的运算符学会使用常用的运算符学会使用常用的运算符
2、学会使用常用的运算符v学会正确书写学会正确书写学会正确书写学会正确书写C C表达式表达式表达式表达式v掌握运算符的优先级、结合性和运算对象掌握运算符的优先级、结合性和运算对象掌握运算符的优先级、结合性和运算对象掌握运算符的优先级、结合性和运算对象数目数目数目数目v理解表达式的求解过程理解表达式的求解过程理解表达式的求解过程理解表达式的求解过程v了解隐式类型转换和强制类型的转换了解隐式类型转换和强制类型的转换了解隐式类型转换和强制类型的转换了解隐式类型转换和强制类型的转换第第3章章 运算符和表达式运算符和表达式C C运运运运算算算算符符符符算术运算符:(算术运算符:(算术运算符:(算术运算符:(
3、+-*/%+-+-*/%+-)关系运算符:(关系运算符:(关系运算符:(关系运算符:(=!=!=)逻辑运算符:(!逻辑运算符:(!逻辑运算符:(!逻辑运算符:(! &|&|)位运算符位运算符位运算符位运算符 :(:(:(:(|&|&)赋值运算符:(赋值运算符:(赋值运算符:(赋值运算符:(=及其扩展)及其扩展)及其扩展)及其扩展)条件运算符:(条件运算符:(条件运算符:(条件运算符:(?:?:)逗号运算符:(逗号运算符:(逗号运算符:(逗号运算符:(, ,)指针运算符:(指针运算符:(指针运算符:(指针运算符:(*& &)求字节数求字节数求字节数求字节数:(:(:(:(sizeofsizeof
4、)强制类型转换:(类型)强制类型转换:(类型)强制类型转换:(类型)强制类型转换:(类型)分量运算符:(分量运算符:(分量运算符:(分量运算符:(.-.-)下标运算符:(下标运算符:(下标运算符:(下标运算符:()其它其它其它其它:(:(:(:(()-()-)vv学习运算符应注意:学习运算符应注意:学习运算符应注意:学习运算符应注意:运算符功能运算符功能运算符功能运算符功能与运算量关系与运算量关系与运算量关系与运算量关系要求运算量个数、要求运算量个数、要求运算量个数、要求运算量个数、要求运算量类型要求运算量类型要求运算量类型要求运算量类型运算符优先级别运算符优先级别运算符优先级别运算符优先级别
5、优先级高优先级高优先级高优先级高( (级别数值小级别数值小级别数值小级别数值小) )者先运算者先运算者先运算者先运算结合方向(优先级相同时)结合方向(优先级相同时)结合方向(优先级相同时)结合方向(优先级相同时)左结合:运算对象先参加左边的运算,结果再参左结合:运算对象先参加左边的运算,结果再参左结合:运算对象先参加左边的运算,结果再参左结合:运算对象先参加左边的运算,结果再参加右运算。加右运算。加右运算。加右运算。右结合:运算对象先参加右边的运算,结果再参右结合:运算对象先参加右边的运算,结果再参右结合:运算对象先参加右边的运算,结果再参右结合:运算对象先参加右边的运算,结果再参加左运算。加
6、左运算。加左运算。加左运算。结果的类型结果的类型结果的类型结果的类型3.1 算术表达式vv3.1.1 3.1.1 算术表达式算术表达式算术表达式算术表达式表达式表达式表达式表达式:常量,变量,函数,运算符组成的有意义的式子。常量,变量,函数,运算符组成的有意义的式子。常量,变量,函数,运算符组成的有意义的式子。常量,变量,函数,运算符组成的有意义的式子。基本算术运算符:基本算术运算符:基本算术运算符:基本算术运算符: + + - - * / % * / %结合方向:从左向右结合方向:从左向右结合方向:从左向右结合方向:从左向右优先级:优先级:优先级:优先级: - - - -* / %* / %
7、 - + - - + - (2) (3) (4)(2) (3) (4)说明:说明:说明:说明: “-”“-”为为为为单目单目单目单目运算符时运算符时运算符时运算符时, ,右结合性右结合性右结合性右结合性 两整数相除,结果为整数两整数相除,结果为整数两整数相除,结果为整数两整数相除,结果为整数 %要求两侧均为整型数据要求两侧均为整型数据要求两侧均为整型数据要求两侧均为整型数据例例5/2得得2-5/2.0得得-2.5例例5%2得得1-5%2得得-11%10得得16%2得得05.5%2( )写成写成写成写成C C表达式:表达式:表达式:表达式:1.0/2*(a*x+(a+x)/4/x) 1.0/2*
8、(a*x+(a+x)/4/x) 写成写成写成写成C C表达式:表达式:表达式:表达式:(a+b)/(c+d*e/(f+g*h) (a+b)/(c+d*e/(f+g*h) 作用:使变量值加作用:使变量值加作用:使变量值加作用:使变量值加1 1或减或减或减或减1 1种类:种类:种类:种类:前缀前缀前缀前缀+i, -i (+i, -i (先执行先执行先执行先执行i i+1+1或或或或i-1i-1,再使用再使用再使用再使用i i值)值)值)值)后后后后缀缀缀缀i+,i- (i+,i- (先使用先使用先使用先使用i i值值值值, ,再执行再执行再执行再执行i i+1+1或或或或i-1i-1)说明:说明:
9、说明:说明:+ - + - 不能不能不能不能用于常量和表达式用于常量和表达式用于常量和表达式用于常量和表达式, ,如如如如5+5+,( (a+b)+a+b)+ -+ -结合方向:结合方向:结合方向:结合方向: 自右向左自右向左自右向左自右向左优先级:优先级:优先级:优先级:- + - -* / % -+ - + - -* / % -+ - (2) (2) (3) (3) (4) (4)3.1.2自增、自减运算自增、自减运算例例例例 3.13.1注意下列程序运行后变量注意下列程序运行后变量注意下列程序运行后变量注意下列程序运行后变量x x与与与与y y的区别。的区别。的区别。的区别。#inclu
10、de#include voidmain()voidmain()intinta=2,b=2,x,y;a=2,b=2,x,y;x=-a+2;x=-a+2;/前缀运算前缀运算前缀运算前缀运算y=b-+2;y=b-+2;/后缀运算后缀运算后缀运算后缀运算printf(xprintf(x=%dy=%dn”,x,y);=%dy=%dn”,x,y);printf(aprintf(a=%db=%dn”,a,b);=%db=%dn”,a,b); 程序运行:程序运行:程序运行:程序运行:x=3y=4x=3y=4a=1b=1a=1b=1 vv 赋值运算赋值运算赋值运算赋值运算符号:符号:符号:符号:= = = =赋
11、值表达式:赋值表达式:赋值表达式:赋值表达式:变量变量变量变量= = = =表达式表达式表达式表达式作用:将一个数据(常量或表达式)赋给一个变量作用:将一个数据(常量或表达式)赋给一个变量作用:将一个数据(常量或表达式)赋给一个变量作用:将一个数据(常量或表达式)赋给一个变量vv赋值语句赋值语句赋值语句赋值语句 变量变量变量变量= = = =表达式表达式表达式表达式; ; ; ;vv复合赋值运算复合赋值运算复合赋值运算复合赋值运算种类种类种类种类:+= -= *= /= %= += -= *= /= %= = &= = |= = &= = |=含义:含义:含义:含义: 变量变量变量变量 op=
12、 op= 表达式表达式表达式表达式 变量变量变量变量 = = 变量变量变量变量 op op 表达式表达式表达式表达式3.2 赋赋 值值 表表 达达 式式a+=3a+=3a=a+3a=a+3x*=y+8x*=y+8x=x*(y+8)x=x*(y+8)x%=3x%=3x=x%3x=x%3例例例例 a=3;a=3;d=d=funcfunc();();c=d+2;c=d+2;的左边必须是一个变量的左边必须是一个变量的左边必须是一个变量的左边必须是一个变量3.2 赋赋 值值 表表 达达 式式vv说明说明说明说明: :结合方向:自右向左结合方向:自右向左结合方向:自右向左结合方向:自右向左优先级优先级优先
13、级优先级: 14: 14左侧必须是变量,不能是常量或表达式左侧必须是变量,不能是常量或表达式左侧必须是变量,不能是常量或表达式左侧必须是变量,不能是常量或表达式赋值表达式的值与变量值相等赋值表达式的值与变量值相等赋值表达式的值与变量值相等赋值表达式的值与变量值相等, ,且可嵌套且可嵌套且可嵌套且可嵌套vv赋值时的类型转换赋值时的类型转换赋值时的类型转换赋值时的类型转换 赋值转换赋值转换赋值转换赋值转换规则规则规则规则: : : :使赋值号右边表达式值使赋值号右边表达式值使赋值号右边表达式值使赋值号右边表达式值自动自动自动自动转换成其左边转换成其左边转换成其左边转换成其左边变量的类型变量的类型变
14、量的类型变量的类型例如:例如:例如:例如:“ “double zdouble z;” ”,语句,语句,语句,语句“ “z=23;”z=23;”执行后,执行后,执行后,执行后,z z的值的值的值的值是实数是实数是实数是实数23.023.0例如:例如:例如:例如:“ “intint x=3 x=3;” ”,语句,语句,语句,语句“ “x+=1.999;”x+=1.999;”执行后,执行后,执行后,执行后,x x的的的的值是值是值是值是4 4 例例例例 3.23.2赋值运算符的使用。赋值运算符的使用。赋值运算符的使用。赋值运算符的使用。#include#include voidmain()voidm
15、ain()intinta=5,b=5,c=5;a=5,b=5,c=5;a-=2;a-=2;/表示表示表示表示a=a-2a=a-2b*=a+3;b*=a+3;/表示表示表示表示b=b*(a+3)b=b*(a+3)c/=a-1;c/=a-1;/表示表示表示表示c=c/(a-1)c=c/(a-1)printf(aprintf(a=%d,b=%d,c=%dn,a,b,c);=%d,b=%d,c=%dn,a,b,c); 程序运行:程序运行:程序运行:程序运行:a=3,b=30,c=2a=3,b=30,c=23.3 关系表达式vv关系运算符关系运算符关系运算符关系运算符种类:种类:种类:种类: = !=
16、= !=结合方向:结合方向:结合方向:结合方向:自左向右自左向右自左向右自左向右优先级别:优先级别:优先级别:优先级别: = =!=!=优先级优先级优先级优先级6 6(高)(高)(高)(高)优先级优先级优先级优先级7 7(低)(低)(低)(低)程序运行:程序运行:程序运行:程序运行:no,x!=yno,x!=y例例例例 3.33.3分析下面程序的运行结果。分析下面程序的运行结果。分析下面程序的运行结果。分析下面程序的运行结果。#include#include voidmain()voidmain()floatx,y=0.3;floatx,y=0.3;y=y*11;y=y*11;x=3+0.3;
17、x=3+0.3;if(x=y)if(x=y)printf(ok,xprintf(ok,x=y);=y);/若若若若x x与与与与y y相等,输出相等,输出相等,输出相等,输出okok,x=yx=yelseelseprintf(no,xprintf(no,x!=y);!=y);/x/x与与与与y y不相等,则输出不相等,则输出不相等,则输出不相等,则输出nono,x!=yx!=y 改为改为改为改为fabs(x-yfabs(x-yfabs(x-yfabs(x-y)1e-6)1e-6)1e-6)=y2=y2=1=1=”=”与与与与“ “”=1”1=1”其值是其值是其值是其值是1 1,得,得,得,得“
18、 “z=11”z=11”,再再再再计算计算计算计算“ “11”11”为为为为0 0,故,故,故,故z z及表达式的计算结果为及表达式的计算结果为及表达式的计算结果为及表达式的计算结果为0 0。(3 3)853853 表达式值是表达式值是表达式值是表达式值是1 1。先计算。先计算。先计算。先计算“ “85”85”其值为其值为其值为其值为0 0,再计算,再计算,再计算,再计算“ “03”0= c=A&cA&c=Z=c=AA&c c=aa&c c=zb|!ab|!(cAcA)&xy&xy代入各变量值:代入各变量值:代入各变量值:代入各变量值:0|!0|!(0 0)&0&0即即即即 0|1&00|1&
19、0亦即亦即亦即亦即 0|00|0,结果为,结果为,结果为,结果为0 0。(2 2)ab&!c5|y*2xab&!c5|y*2x按照运算顺序加括号,改写作按照运算顺序加括号,改写作按照运算顺序加括号,改写作按照运算顺序加括号,改写作“ “(abab)&(!c!c) 5 5)| |(y*2y*2)xx)” ”,代入各变量值后为代入各变量值后为代入各变量值后为代入各变量值后为“ “(1&1&(0505)| |(8.83.68.8c&a+cb&b+caa+bc&a+cb&b+ca(2 2)条件条件条件条件“ “|x|x|是一个两位数是一个两位数是一个两位数是一个两位数” ”。逻辑表达式逻辑表达式逻辑表
20、达式逻辑表达式:x=10&x=99&x=10&x=99&x1&x=2&x=2&y1&x=2&x=2&yb)&(n=cd)(m=ab)&(n=cd) / /结果结果结果结果m=0,n=1m=0,n=1例例例例 3.73.7分析下面程序的运行结果。分析下面程序的运行结果。分析下面程序的运行结果。分析下面程序的运行结果。#include#includevoidmain()voidmain()intintx,y,z,m;x,y,z,m;x=y=z=0;x=y=z=0;/给变量给变量给变量给变量x x、y y、z z赋值赋值赋值赋值0 0m=(x=1)&(y=1)|(z=1);m=(x=1)&(y=1)
21、|(z=1);printf(mprintf(m=%dx=%dy=%dz=%d,m,x,y,z);=%dx=%dy=%dz=%d,m,x,y,z); 程序运行:程序运行:程序运行:程序运行:m=1x=1y=1z=0m=1x=1y=1z=03.5 条件表达式条件表达式vv条件运算符:条件运算符:条件运算符:条件运算符:?:?:?:?:vv条件表达式的一般形式:条件表达式的一般形式:条件表达式的一般形式:条件表达式的一般形式: 表达式表达式表达式表达式1 1 ? ? 表达式表达式表达式表达式2 2 : : 表达式表达式表达式表达式3 3执行过程执行过程执行过程执行过程例例例例if(ab)if(ab)
22、printf(“%d”,aprintf(“%d”,a); );elseelseprintf(“%d”,bprintf(“%d”,b); );printf(“%d”,aprintf(“%d”,ab?a:b);b?a:b);例例例例 求求求求 a+|b|a+|b|printf(“a+|bprintf(“a+|b|=%dn”,b0?a+b:a-b);|=%dn”,b0?a+b:a-b);表达式表达式表达式表达式1 1取取取取表达式表达式表达式表达式2 2值值值值取取取取表达式表达式表达式表达式3 3值值值值非非非非0 0=0=0条件运算符可嵌套条件运算符可嵌套条件运算符可嵌套条件运算符可嵌套 如如如
23、如 x0?1:(x0?1:(xb?a:cd?c:d ab?a:cd?c:d ab?a:(cd?c:d) ab?a:(cd?c:d)表达式表达式表达式表达式1 1、表达式、表达式、表达式、表达式2 2、表达式表达式表达式表达式3 3类型可不同,条件表达式值类型可不同,条件表达式值类型可不同,条件表达式值类型可不同,条件表达式值取较高的类型取较高的类型取较高的类型取较高的类型n n功能:相当于条件语句,但不能取代一般功能:相当于条件语句,但不能取代一般功能:相当于条件语句,但不能取代一般功能:相当于条件语句,但不能取代一般ifififif语句语句语句语句例例例例 3.8 3.8 用条件表达式计算。
24、用条件表达式计算。用条件表达式计算。用条件表达式计算。( (1)1)求变量求变量求变量求变量t t的符号。的符号。的符号。的符号。f=t=0?1:1f=t=0?1:1(2)(2)求三个变量求三个变量求三个变量求三个变量x x、y y、z z的最大值。的最大值。的最大值。的最大值。s=(s=xy?x:y)z?s:zs=(s=xy?x:y)z?s:z(3)(3)将字符变量将字符变量将字符变量将字符变量chch若为小写字母则改为大写字母,其余字符不变。若为小写字母则改为大写字母,其余字符不变。若为小写字母则改为大写字母,其余字符不变。若为小写字母则改为大写字母,其余字符不变。 chch=(=(chc
25、h=a&cha&ch=0)?printf(%d,x):(x0)?printf(%d,x):printf(%dprintf(%d,x);,x);例例例例 3.9 3.9 下列程序输入变量下列程序输入变量下列程序输入变量下列程序输入变量a a、b b、c c 后,按值从大到小后,按值从大到小后,按值从大到小后,按值从大到小输出。输出。输出。输出。#include#include voidmain()voidmain()intinta,b,c,m,n,k;a,b,c,m,n,k;scanf(%d%d%d,&a,&b,&cscanf(%d%d%d,&a,&b,&c); );m=ab?a:b;m=ab?
26、a:b;/m/m取取取取a a、b b中大数中大数中大数中大数m=mc?m:c;m=mc?m:c;/m/m取取取取a a、b b、c c中最大数中最大数中最大数中最大数n=ab?a:b;n=ab?a:b;/n/n取取取取a a、b b中小数中小数中小数中小数n=nc?n:c;n=nc?n:c;/n/n取取取取a a、b b、c c中最小数中最小数中最小数中最小数k=a+b+cmnk=a+b+cmn;/;/三个数的和减去最大、小数,得中间三个数的和减去最大、小数,得中间三个数的和减去最大、小数,得中间三个数的和减去最大、小数,得中间数数数数printf(%dprintf(%d%d%dn,m,k,
27、n);%d%dn,m,k,n); 程序运行:程序运行:程序运行:程序运行:587587 758758vv表达式一般形式:表达式一般形式:表达式一般形式:表达式一般形式:表达式表达式表达式表达式1 1, ,表达式表达式表达式表达式2 2, , , ,表达式表达式表达式表达式n nvv结合性结合性结合性结合性: :从左向右从左向右从左向右从左向右vv优先级优先级优先级优先级: : 1515vv逗号表达式逗号表达式逗号表达式逗号表达式的值:等于的值:等于的值:等于的值:等于表达式表达式表达式表达式n n的值的值的值的值vv用途:用途:用途:用途:常用于循环常用于循环常用于循环常用于循环forfor语
28、句中语句中语句中语句中例例例例: :#include#include main()main()intintx,y=7,a,b,c;x,y=7,a,b,c;floatz=4;floatz=4;x=(y=y+6,y/z);x=(y=y+6,y/z);c*=(a=b=1,c=2,b+=a,b*5);c*=(a=b=1,c=2,b+=a,b*5);printf(xprintf(x=%dn,x);=%dn,x);printf(“aprintf(“a=%d,b=%d,c=%d”,a,b,c);=%d,b=%d,c=%d”,a,b,c); 运行结果:运行结果:运行结果:运行结果:x=3x=3a=1,b=2,
29、c=20a=1,b=2,c=203.6 逗号表达式逗号表达式3.7.1 3.7.1 运算符优先级运算符优先级运算符优先级运算符优先级规定了在表达式求解过程中,当运算对象的左右都有运算符规定了在表达式求解过程中,当运算对象的左右都有运算符规定了在表达式求解过程中,当运算对象的左右都有运算符规定了在表达式求解过程中,当运算对象的左右都有运算符时运算的先后次序,即运算对象先做优先级高的运算。时运算的先后次序,即运算对象先做优先级高的运算。时运算的先后次序,即运算对象先做优先级高的运算。时运算的先后次序,即运算对象先做优先级高的运算。如:如:如:如:46*846*8,先做,先做,先做,先做“*”“*”
30、运算,其结果再做运算,其结果再做运算,其结果再做运算,其结果再做“ “”,因,因,因,因“*”“*”优优优优先级高于先级高于先级高于先级高于“ “”。 C C语言的运算符有语言的运算符有语言的运算符有语言的运算符有1515种优先级,运算级别高的运算先计算,再种优先级,运算级别高的运算先计算,再种优先级,运算级别高的运算先计算,再种优先级,运算级别高的运算先计算,再进行运算级别低的运算。表达式中可通过增加括号来改变运进行运算级别低的运算。表达式中可通过增加括号来改变运进行运算级别低的运算。表达式中可通过增加括号来改变运进行运算级别低的运算。表达式中可通过增加括号来改变运算顺序。算顺序。算顺序。算
31、顺序。 3.7 多种类型混合运算多种类型混合运算表表3.2 部分运算符的优先级与结合性部分运算符的优先级与结合性优先级优先级运算符运算符运算符名称运算符名称运算对象数运算对象数举举 例例结合方向结合方向1()()圆括号圆括号!(a+b)*c自左至右自左至右2!+、-+、-(类型标识符)(类型标识符)sizeof逻辑非逻辑非自加、自减自加、自减正号、负号正号、负号类型强制转换类型强制转换数据长度数据长度1(单目)(单目)!(a0&b=5x=5x5&x5|xy?x:y自右至左自右至左14=+=-=*=/=%=赋值赋值2(双目)(双目)x=5,x*=5,y/=x+6自右至左自右至左15,逗号逗号2(
32、双目)(双目)a=b,b=c+6,c+自左至右自左至右3.7.2 3.7.2 运算符结合方向运算符结合方向运算符结合方向运算符结合方向规定了在表达式求解过程中,若运算对象其左右运算符优规定了在表达式求解过程中,若运算对象其左右运算符优规定了在表达式求解过程中,若运算对象其左右运算符优规定了在表达式求解过程中,若运算对象其左右运算符优先级相同时的运算方向。先级相同时的运算方向。先级相同时的运算方向。先级相同时的运算方向。结合性有两种:从左到右计算为左结合、从右到左计算为结合性有两种:从左到右计算为左结合、从右到左计算为结合性有两种:从左到右计算为左结合、从右到左计算为结合性有两种:从左到右计算为
33、左结合、从右到左计算为右结合。右结合。右结合。右结合。如:表达式如:表达式如:表达式如:表达式1.0*5/21.0*5/2,计算结果为,计算结果为,计算结果为,计算结果为2.52.5;表达式;表达式;表达式;表达式5/2*1.05/2*1.0,计,计,计,计算结果为算结果为算结果为算结果为2.02.0。 3.7 多种类型混合运算多种类型混合运算3.7.3 3.7.3 混合运算的类型转换混合运算的类型转换混合运算的类型转换混合运算的类型转换算术运算中的类型转换算术运算中的类型转换算术运算中的类型转换算术运算中的类型转换隐式转换隐式转换隐式转换隐式转换运算转换规则运算转换规则运算转换规则运算转换规
34、则: : : :不同类型数据运算时先不同类型数据运算时先不同类型数据运算时先不同类型数据运算时先自动自动自动自动转换成同一转换成同一转换成同一转换成同一类型,类型,类型,类型,转换规则如下转换规则如下转换规则如下转换规则如下:3.7 多种类型混合运算多种类型混合运算规则规则规则规则1 1:charchar、short short intint、float doublefloat double 结果类型与转换后的类型相同结果类型与转换后的类型相同结果类型与转换后的类型相同结果类型与转换后的类型相同 如:如:如:如:3.0e35f*4.0e40f 3.0e35f*4.0e40f 计算结果计算结果1
35、2.0e75,类型为类型为double。 自动转换自动转换自动转换自动转换3.7.3 3.7.3 混合运算的类型转换混合运算的类型转换混合运算的类型转换混合运算的类型转换3.7 多种类型混合运算多种类型混合运算规则规则规则规则2 2 2 2:相同类型(除:相同类型(除:相同类型(除:相同类型(除charchar、shortshort、floatfloat型外)的操作型外)的操作型外)的操作型外)的操作数作算术运算的结果为同一类型。数作算术运算的结果为同一类型。数作算术运算的结果为同一类型。数作算术运算的结果为同一类型。 如:如:如:如: 5/2 5/2 5/2 5/2 结果为结果为结果为结果为
36、2 2 2 2, 5/25/25/25/2结果为结果为结果为结果为 2 2 2 2。 规则规则规则规则3 3 3 3:不同类型不同类型不同类型不同类型,先按,先按,先按,先按规则规则规则规则1 1转换,还有转换,还有转换,还有转换,还有不同类型,则不同类型,则不同类型,则不同类型,则再再再再按按按按低级别低级别低级别低级别 高级别,高级别,高级别,高级别,其结果类型与转换后的类型其结果类型与转换后的类型其结果类型与转换后的类型其结果类型与转换后的类型相同。相同。相同。相同。自动转换自动转换如:如:如:如: 2.0f+5/2*32.0f+5/2*3,原表达式相当于,原表达式相当于,原表达式相当于
37、,原表达式相当于2.0f+(5/2)*3)2.0f+(5/2)*3),结果,结果,结果,结果为为为为8.08.0,类型是,类型是,类型是,类型是doubledouble型。型。型。型。 各类型的级别高低如下:各类型的级别高低如下:各类型的级别高低如下:各类型的级别高低如下: charcharshortintunsignedlongunsignedshortintunsignedlongunsignedlongfloatdoublelongfloatdouble3.7.3 3.7.3 混合运算的类型转换混合运算的类型转换混合运算的类型转换混合运算的类型转换强制类型转换运算强制类型转换运算强制类型
38、转换运算强制类型转换运算一般形式:一般形式:一般形式:一般形式:( (类型名类型名类型名类型名) )( (表达式表达式表达式表达式) )例例例例 ( (int)(x+yint)(x+y) ) ( (int)x+yint)x+y (double)(3/2) (double)(3/2) (int)3.6 (int)3.6 说明:强制转换得到所需类型的中间变量,原变量类说明:强制转换得到所需类型的中间变量,原变量类说明:强制转换得到所需类型的中间变量,原变量类说明:强制转换得到所需类型的中间变量,原变量类型不变型不变型不变型不变 3.7 多种类型混合运算多种类型混合运算例例例例 3.10 3.10
39、强制类型转换举例。强制类型转换举例。强制类型转换举例。强制类型转换举例。 (1 1)计计计计算算算算实实实实型型型型变变变变量量量量x x的的的的整整整整数数数数部部部部分分分分与与与与y y的的的的小小小小数数数数部部部部分分分分之之之之和。和。和。和。 写作:写作:写作:写作:( (int)x+y-(int)yint)x+y-(int)y(2 2)实型数据实型数据实型数据实型数据d d保留保留保留保留3 3位小数(不四舍五入)。位小数(不四舍五入)。位小数(不四舍五入)。位小数(不四舍五入)。 写作:写作:写作:写作:( (int)(dint)(d*1000)/1000.0*1000)/1000.0(3 3)求整型变量求整型变量求整型变量求整型变量k k的右边第的右边第的右边第的右边第n n位上的数字。位上的数字。位上的数字。位上的数字。 写作:写作:写作:写作:k/(int)pow(10,n1)%10k/(int)pow(10,n1)%10