收藏 分销(赏)

运算符小结.doc

上传人:s4****5z 文档编号:8095555 上传时间:2025-02-04 格式:DOC 页数:8 大小:60KB 下载积分:10 金币
下载 相关 举报
运算符小结.doc_第1页
第1页 / 共8页
运算符小结.doc_第2页
第2页 / 共8页


点击查看更多>>
资源描述
运算符小结 ①左结合方向的运算符: 算术(%必须是整数)、 关系、逻辑、逗号 ②右结合方向的运算符 自增、自减、赋值(赋值号"="左边是必须是变量)、条件 ③运算符的优先次序 ()、!++/--/-转移、算术、关系(<<=>>=)、关系(= = !=)、&&、||、条件(?)、赋值、逗号 ④混合运算中的强制类型转换 ⑤逻辑运算中的求值短路 5>3&&2||8<4-!0 1||∞ (结果1) 0&&∞ (结果0) 如:a&&b&&c a<>0才判断a&&b 例:1) -a++ 相当于 -(a++) 2) x=4,y=7 求:y+=++x-3 x的值5 y的值9 3) x=4,y=7 求:y=y+++x-3 x的值4 y的值9 4) int a=7;float x=2.5,y=4.7; 求:s=x+a%3*(int)(x+y)%2/4 s的值2.500000 a%3*(int)(x+y)%2 → 1(整型) / 4 (整型) →0.25 →0(整型) 运算符及结合使用性问题 操作符的结合性: 左结合性: 若表达式中相邻的两个操作符优先级相同,先执行那一个操作符?即与前一个操作符的结合性有关。 如果前一个(左边的)操作符具有“由左向右”的结合性,则先执行该操作符,否则就处理右边那个操作符 例:22-19+2*5 由于“-”和“+”这两个相邻的操作符优先级相同,且“-”的结合性为“由左向右”,因此先计算22-19,得3,再计算3+2*5 右结合性: k=j+=5*i 相邻的操作符“=”和“+=”优先级相同,且“=”具有“由右向左”的结合性,则先处理“+=”,即先要完成表达式j+=5*i的求值;此时,由于“*”的优先级高于“+=”,因此先计算5*i,再执行“+=”完成对j的赋值,最后执行“=” 【例】: x=4; y=7; x=4; y=7; y+=x- - +3; y+=++x-3; 得:x为3 y为14 得:x为5 y为9 【例】: d=5; d=5; k=++d*2; k=d++*2; 得:k为12 d为6 得:k为10 d为6 【例】: i=3 z=(i++)+(i++)+(i++) 结果:z值为9 i值为6 (不是3+4+5=12)i=3 如果:z=(++i)+(++i)+(++i) 结果:z值=? i值=? 18,6 【例】: main() { int z,x,y; x=y=3; z=x+++y; printf("z=%d,x=%d,y=%d",z,x,y); } ; 输出结果:z=6 x=4 y=3 如果:z= -x+++y; 输出结果:z=-1 x=5 y=3 【例】写出下列程序运行结果 main() {int a=1,b=2,c,d,e; c=(-a++)+(++b); // a=2 b=3 c=2 d=(b--)+(++a)+a; // a=3 b=2 d=9 e=(a/(++b))-(b/(--a)); // a=2 b=3 e=0 printf(“c=%d,d=%d,e=%d\n”,c,d,e); } 运行结果如下 c=2,d=9,e=0 【例】 如果:a=3; 求:a+=a-=a*a; [有:1) a*a; 2)a= a-(a*a); 3) a+=-6 ] 结果值为:-12 【例】 a=2*5,a*3; a值为10 结果值为:30 (先求:a=2*5,后求:a*3) x=(a=2*5,a*3),a+4 x值为30 结果值为:34 相反条件: x > y x <= y = = 相反 != > <= < >= 等价条件: !( x= =y) x!=y !( x! =y) x=y !( x > y) x<=y !(E1&&E2) !E1||!E2 !(E1||E2) !E1&&!E2 !( x= =y) x!=y 永假条件: x < 3 && x >15 “假” 永真条件: y > 0 | | y<=0 “真” 典型例题分析 例1 int i=5,j=5,x; x=(++j)+(++j)+(++j); printf("%d,%d",(++i)+(++i)+(++i),x); i=21,tc2.0运行结果。因为。6+7+8=21 x=24, “++”比“+”的优先级高 例2 ch='a'; /*a=97*/ printf("%x,%o",ch,ch,); 61,141(16进制、8进制) 例3 x=5; y=2+(x+=x++,x=8,++x); 结果x=9,y=11 逗号运算顺序为从左向右,即等于: x+=x++;//x==11 x=8;//x==8 ++x;//x==9 y=2+9=11 例4 int k=-1; printf("k1=%d,k2=%u",k,k); k1=-1,k2=65535(u无符号数) 例5 int a=b=c=-1; ++a&&++b&&++c 求 a,b,c的值 a=0,b=-1,c=-1(求值短路) ++a||++b||++c 求 a,b,c的值 a=0,b=0,c=0 例6 sum=pad=5; pad=sum+ +,pad+ + ,+ + pad; printf("%d\n",pad); pad=7,sum=6 例7 int i=010,j = 10; printf("%d,%d\n",++i,j--); 9,10 例8 int a=-3; a+=a-=a*a; -24 例9设有语句char a='\072';则变量a ( )。 A)包含1个字符 B)包含2个字符 C)包含3个字符 D)说明不合法 a=’:’ 例10 int a=2,c=5; printf("a=%%d,b=%%d\n",a,c); a=%%d,b=%%d 例11 int a ,b,d=241; a=d/100%9; b=(-1)&&(-1); printf("%d,%d\n",a,b); a=2 b=1,先d/100=2 后2%9 例12 int a=2、b=3、c=4; a*=16+(b++)-(++c); a=2*(16+3-5)=28 例13合法赋值语句是 a=7+b+c=a+7; a=7+b++=a+7; a=7+b,b++,a+7 (合法) a=7+b,c=a+7; (合法) 例14 int a; printf("%d\n",(a=3*5,a++*4,a+++5)); 21 printf("%d\n",a=(a=3*5,a*4,a+5)) ); 20 printf("%d\n",a=3*5,a*4,a+5); 15 例15 int x=10,y=3,z; printf("%d\n",z=(x%y,x/y)); 3 printf("%d\n",z=x%y,x/y); 1 例16 10!=9的值 1 例17不正确的赋值语句 ++t; n1=(n2=(n3=0)); k=i==j; a=b+c=1; 不正确 例18合法的字符常量是 '\084' '\x43' 合法 'ab' "\0" 例19 double x,y ; x=1,y=x+3/2; 2.000000 例20 int u=010,v=0x10,w=10; printf("%d,%d,%d\n,u,v,w); 8,16,10 例21 int a=1,b=2,c=3,d=4; a<b?a:c<d?a:d 1 例22 int x; x=10; x+=x-=x-x; 20 例23 int x,y,z,t; x=y=z=1; t=++x||++y&&++z; 1 例24 int x,y,z,k; x=(y=4,z=16,k=32) 32 例25 int k=7 ,x=12; 能使值为3的表达式是 x%=(K%=5) x%=(k-k%5) x%=k-k%5 (x%=k)-(k%=5) 例26 int x,y x+=y;y=x-y;x-=y; 功能 A)把x 和y按从大到小排列 B)把x和y按从小到大排列 C)无确定结果 D)交换x和y中的值 例27 unsigned int x x=65535; printf("%d\n",x); -1 printf("%d\u",x); 65535
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服