03 运算符及表达式_第1页
03 运算符及表达式_第2页
03 运算符及表达式_第3页
03 运算符及表达式_第4页
03 运算符及表达式_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本章内容表达式概念算数运算符++,--运算符赋值运算符逗号运算符关系运算符逻辑运算符条件运算符位运算复合运算混合运算类型运算符运算符优先级表常用数学函数表达式概念:常量、变量、数组元素、函数等运算对象和运算符号以及括号的有意义的组合,都被成为表达式,也就是说表达式是一个运算的式子,如下面都是表达式2a2+aa++2+sin(5)a=2a,b算数运算符+(加)-(减)*(乘)/(除)%(求余)注意写C语言表达式时和数学中的算式相区分,下面数学算式都不是正确的C语言算式:(x+y)(a+b)(缺乏乘号)注意C语言中,同种类型值运算时结果为同类型,整数除整数结果为一个整数,如5/2值为2,不是2.5求余运算要求两个数皆为整数,结果为两者整除后产生的余数,如5%2值为1,4%2值为0*/%优先级高于+-优先级,运算方向从左向右++,--++

--对应于低级语言中的自增和自减运算,运算只能用于变量,使变量自增1或减1,不能用于表达式或常量,下面都是错的3++(x+y)—#include<stdio.h>intmain(){ inta=1,b=1; printf("%d,%d\n",a++,++b); printf("%d,%d\n",a,b); }++--运算符举例//例1#include"stdio.h"intmain(){inta=1,b,c; b=a++; c=b++; printf("a=%d,b=%d,c=%d\n",a,b,c);}//例2#include"stdio.h"intmain(){inta=1,b,c; b=a++; c=++a; printf("a=%d,b=%d,c=%d\n",a,b,c);}赋值运算在C语言中,=也是一个运算符,它的左侧必须是一个变量,功能是把右侧表达式的值赋给左侧的变量,并把此值作为=表达式的值,试比较:a=(a1+a2);+是运算符,+表达式产生的结果即(a1加a2的和)赋给了a,b=(b1=b2);=是运算符,括号内的=使b1获得b2的值,同时=表达式产生的结果即(b2)赋给了b当然括号外的=也产生表达式值,但此值没有保存到变量中赋值运算符优先级仅高于”,”运算符,方向从右向左当=两侧类型不一致时,右侧自动转化成左侧类型低类型向高类型转化时会自动扩展字节,而值不变,扩充对于整数类,扩充字节填充符号位数字,正数填0,负数填1高类型向低类型转化时,只从低字节截取#include"stdio.h"intmain(){shorta=0x12345678;printf("%x\n",a);}#include"stdio.h"intmain(){ inta=2,b=2,c,d; c=a+1; d=b=1; printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);}逗号运算符格式:表达式1,表达式2逗号运算符返回逗号右侧表达式值作为逗号表达式值对比:a=(2+3);值为5b=(2,3);值为3逗号运算符在所有优先级别最低,运算方向方向从左向右下面表达式的值及a变量的值:a=(5+4,c=6,d=7)//表达式值为7,a的值为7a=5+4,c=6,d=7//表达式值为7,a的值为9a=(a=3*5,(a*4,a+5)),a+10//表达式值为30,a的值为20优先级与结合方向优先级只决定操作数先与谁进行运算同优先级由结合方向决定先与谁结合a=1,1*2+a++1,1*2+a++1,2+a++1,2+11,33(正确)a=b=c=0(同优先级右结合)a=b=0a=002*3/6(同优先级左结合)6/613/6*2(同优先级左结合)0*20数学中的次序1+2*3-4*5+5*61+6-20+30……C语言中的次序1+2*3-4*5+5*61+6-4*5+5*67-4*5+5*67-20+5*6-13+5*6-13+3017关系运算关系运算结果只能为1(表示真或正确)或0(表示假或错误)高优先级:<<=>>=低优先级:==!=例:2>2(值为0)2>=2(值为1)运算方向为从左向右运算,如:30==60==0结果为110<5<20结果为1由此可以看出,这样连续比较是没有意义的注意判断相等的关系运算符为相临的两个等号,一旦漏掉一个就变成了赋值运算如假设a=0;则表达式a==0(表达式值为1),a==1(表达式值为0)而不管a值是多少,a=0(表达式值永为0,永假式),a=1(表达式值永为1,永真式)逻辑运算&&(与运算):表达式1&&表达式2相当于中文”并且”,两个表达式全是1,则结果为1,否则结果为01&&1(值为1)1&&0(值为0)0&&0(值为0)||(或运算):表达式1||表达式2相当于中文”或”||,两个表达式全是0,则结果为0,否则结果为11||1(值为1)1||0(值为1)0||0(值为0)!(否运算):!表达式表达式值取反,0变1,1变0!1(值为0)!0(值为1)在逻辑运算中,所有的非0值都等同于1,如:6&&1(值为1)!6(值为0)三个运算符中,!为单目运算符,优先级最高,&&比||优先级高逻辑运算短路现象与或运算中左侧分量就能确定运算结果时,右侧分量运算会不执行C语言为什么要“偷懒”if(a!=0&&b/a>3),如果没有短路规则,表达式中将出项零做除数现象示例:#include"stdio.h"intmain(){inta,b,c;a=5;b=2;c=3;a=a++||++b&&c++;printf("a=%d,b=%d,c=%d\n",a,b,c);b=a>c&&c++||a++&&c++||a++;printf("a=%d,b=%d,c=%d\n",a,b,c);}条件运算符表达式1?表达式2:表达式3当表达式1的值为非0值时,表达式的值作为表达式值,否则表达式3的值作为表达式值a=-1;b=a>0?10:20;//b的值为20a=1;b=a>0?’A’:’B’;//b的值为’A’优先级仅高于逗号运算符和赋值运算符,运算方向具有右结合性,如:a>b?c:d<3?e:f,等同于a>b?c:(d<3?e:f)表达式产生值位运算位运算是对操作数二进制位的运算逻辑位运算:&(按位与)、|(按位或)、^(按位异或)、~(按位取反)移位运算:<<(左移)低位补零、>>(右移)有符号数补高位补符号位数字,无符号数补0复合运算C语言中,把一些运算符和=组合起来,同时完成运算符所指的运算及赋值预算,称为复合运算+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=a+=b相当于a=a+b复合运算符优先级等同于赋值运算符a=2;a*=2+3;因为*=优先级低于+,所以表达式值为10混合运算当不同数据类型进行运算时,称为混合运算运算规律:不同数据类型相遇时,低类型产生一个向高类型的转化值(操作数本身不变化),然后参与运算,这条规则不适应赋值运算例子:5/2+3.5结果为5.5chara=‘\xff’;a*10*’a’;结果-970强制类型转换用类型符号把表达式值转换为指定类型格式:(类型名)表达式如:(int)(a+b),(float)c;注意只影响结果,不影响操作数运算符优先级归类运算符结合方向单体运算符()[]->.自左向右单目运算符!~++---(type)*&sizeof自右向左算数运算符*/%自左向右+-自左向右移位运算符<<>>自左向右关系运算符<<=>=>自左向右==!=自左向右位逻辑运算符&^|

自左向右逻辑运算符&&自左向右||自左向右条件运算符?:自右向左赋值运算符=+=-=*=/=%=&=|=<<=>>=自右向左逗号运算符,自左向右math.h中提供的数学函数doublefabs(doubled)求绝对值intabs(intn)求绝对值doublesqrt(double

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论