《第10讲 数据类型和表达式(2).ppt》由会员分享,可在线阅读,更多相关《第10讲 数据类型和表达式(2).ppt(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第十讲数据类型和表达式(二)/学习目标知道自动类型转换的规律会使用强制类型转换进一步理解各种算术表达式、赋值表达式、关系表达式、条件表达式、逗号表达式/不同类型数据的混合运算,先转换为同一类型,再运算。6.4.1自动类型转换非赋值运算的类型转换赋值运算的类型转换6.4.2强制类型转换6.4类型转换/6.4.1自动类型转换(非赋值运算)水平方向:自动垂直方向:低高高高 double float unsigned long long unsigned unsigned short 低低 int char,short/自动类型转换(非赋值运算)A+1210.05657766.95高高 double
2、float unsigned long long unsigned unsigned short 低低 int char,short/自动类型转换(赋值运算)变量=表达式计算赋值运算符右侧表达式的值将赋值运算符右侧表达式的值赋给左侧的变量将赋值运算符右侧表达式的类型将赋值运算符右侧表达式的类型自动转换成自动转换成赋值号左侧变量的类型赋值号左侧变量的类型/自动类型转换(赋值运算)doublex;x=1;x=?short a=1000;char b=A;long c;c=a+b;c=?int ai;ai=2.56;ai=?short bi;bi=0 x12345678Lbi=?x=1.000000
3、ai=2c=1065bi=22136/6.4.2强制类型转换强制类型转换运算符(类型名)表达式(double)3(int)3.8(double)(5/2)(double)5/23.032.02.5/强制类型转换示例#includeintmain(void)inti;doublex;x=3.8;i=(int)x;printf(x=%f,i=%dn,x,i);printf(double)(int)x=%fn,(double)(int)x);printf(xmod3=%dn,(int)x%3);return0;x=3.800000,i=3(double)(int)x=3.000000 x mod 3
4、=0/表达式:由运算符和运算对象(操作数)组成的有意义的运算式子,它的值和类型由参加运算的运算符和运算对象决定。运算符:具有运算功能的符号运算对象:常量、变量和函数等表达式算术表达式、赋值表达式、关系表达式、逻辑表达式、条件表达式和逗号表达式等6.5表达式/6.5.1算术表达式算术运算符单目 +-+-双目 +-*/%注意/整数除整数,得整数1/4=0,10/3=3%模(求余):针对整型数据5%6=5,9%4=1,100%4=0+和单目运算符,+10和10双目运算符,x+10和 y10双目运算符两侧操作数的类型要相同,否则,自动类型转换后,再运算。/自增运算符+和自减运算符-intn;n+nn-
5、n(只适合变量运算)使变量的值增1或减1+nn+n=n+1-nn-n=n-1取变量的值作为表达式的值+n:n=n+1;取n值作为表达式+n的值n+:取n值作为表达式n+的值;n=n+1/自增运算和自减运算intn,m;n=2;m=+n;n=2;m=n+;n=3n=3m=3m=2m=nn=n+1n=n+1m=n/算术运算符的优先级和结合性单目+-+-双目*/%双目+-高高低低从右向左从右向左-5+3%2=(-5)+(3%2)=-43*5%3=(3*5)%3=0-i+-(i+)/写出C表达式数学式C算术表达式s(s-a)(s-b)(s-c)(x+2)e2x(x+2)*pow(exp(1),2*x)
6、(x+2)*exp(2*x)/6.5.2赋值表达式赋值运算符 =x=3*4优先级较低,结合性从右向左x=y=3 x=(y=3)/赋值表达式变量=表达式计算赋值运算符右侧表达式的值将赋值运算符右侧表达式的值赋给左侧的变量将赋值运算符左侧的变量的值作为表达式的值右侧表达式的类型自动转换成左侧变量的类型右侧表达式的类型自动转换成左侧变量的类型int n;double x,y;n=3.14*2;x=10/4;x=(y=3);/复合赋值运算符赋值运算符简单赋值运算符=复合赋值运算符复合算术赋值运算符+=-=*=/=%=复合位赋值运算符赋值表达式变量 赋值运算符 表达式x+=exp等价于x=x+expx*
7、=y-3x=x*(y-3)/6.5.3关系表达式关系运算符比较两个操作数,比较的结果:真假xyxyx=yx!=y优先级算术运算符=!=赋值运算符左结合a b=cd=a bch a+1 d=a+b c3=x b)=cd=(a b)ch (a+1)d=(a+b)c)(3=x)b=cd=abcha+1d=a+bcb-1=a!=c3=x=3&x=a&ch=A&ch=3&x=3&x=3)&(x 0)?x+2:x*x;int n;(n0)?2.9:1n=10n=-102.91.0if(x0)y=x+2;else y=x*x;x+2 x0y=x2 xb)?a:b;if(ab)z=a;else z=b;/6.
8、5.6逗号表达式表达式1,表达式2,表达式n先计算表达式,然后计算表达式,,最后计算表达式n的值,并将表达式n的值作为逗号表达式的值。inta,b,c;(a=2),(b=3),(c=a+b);逗号运算符的优先级最低,左结合。a=2,b=3,c=a+b/sum=0;for(i=0;i=100;i+)sum=sum+i;逗号表达式的用途for(i=0,sum=0;i=100;i+)sum=sum+i;for(i=0,sum=0;i=100;i+)sum+=i;/6.5.7位运算位逻辑运算按位取反单目右结合&按位与按位异或:相同取0,不同取1|按位或移位运算对操作数右移给出的位数复合位赋值运算/位逻
9、辑运算x=00000000000000000y=30000000000000011x&y0000000000000000 x|y0000000000000011xy000000000000001110100101=1111注意区分:&和|&和|按位取反按位取反&按位与按位与 按位异或:相同取按位异或:相同取0,不同取,不同取1|按位或按位或x&y得0 x|y得1/位移位运算对操作数右移给出的位数x3将x向左移3位,空出的位用零填补001110103将x向右移3位00111010300000111/复合位赋值运算符&=|=a&=b相当于a=a&ba=2相当于a=a2/6.5.8其他运算长度运算符
10、sizeof单目运算符,计算变量或数据类型的字节长度inta;sizeof(a)求整型变量a的长度,值为4(bytes)sizeof(int)求整型的长度,值为4(bytes)sizeof(double)求双精度浮点型的长度,值为8(bytes)/运算符的优先级和结合性()!-+-(类型名)sizeof*/%+-=!=&|?:=+=-=*=/=%=,/6.5.9程序解析大小写字母转换#includeintmain(void)charch;printf(inputcharacters:);ch=getchar();while(ch!=n)if(ch=A&ch=a&ch=z)ch=ch-a+A;putchar(ch);ch=getchar();rerurn0;input 10 characters:Reold 123?rEOLD 123?while(ch=getchar()!=n)(ch=getchar()!=nch=getchar()!=n等价吗等价吗?/作业作业习题6:1、2、4/