c语言运算符基础.doc_第1页
c语言运算符基础.doc_第2页
c语言运算符基础.doc_第3页
c语言运算符基础.doc_第4页
c语言运算符基础.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

C语言的运算符不仅具有不同的优先级, 而且还有一个特点,就是它的结合性。在表达式中, 各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的制约, 以便确定是自左向右进行运算还是自右向左进行运算。 这种结合性是其它高级语言的运算符所没有的,因此也增加了C语言的复杂性。运算符的种类C语言的运算符可分为以下几类:1.算术运算符用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(+)、自减(-)共七种。2.关系运算符用于比较运算。包括大于()、小于(=)、小于等于(=)和不等于(!=)六种。3.逻辑运算符用于逻辑运算。包括与(&)、或(|)、非(!)三种。4.位操作运算符参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非()、位异或()、左移()六种。5.赋值运算符用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,=,=,=)三类共十一种。6.条件运算符这是一个三目运算符,用于条件求值(?:)。7.逗号运算符用于把若干表达式组合成一个表达式(,)。8.指针运算符用于取内容(*)和取地址(&)二种运算。9.求字节数运算符用于计算数据类型所占的字节数(sizeof)。10.特殊运算符有括号(),下标,成员(,.)等几种。优先级和结合性 C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。 而在一个运算量两侧的运算符优先级相同时, 则按运算符的结合性所规定的结合方向处理。 C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与“-”号结合, 执行x-y运算,然后再执行+z的运算。这种自左至右的结合方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。 最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算。 C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。C语言中赋值运算符为=,由其参与的表达式即称为赋值表达式.基本表达式如下:变量名=表达式(即将右边表达式的值赋给左边的变量)赋值号=的左边量必须为变量(或其它代表此变量的等价表达式 指针)既然=为运算符号,那么显然有它的运算级别和所谓的运算方向.在C语言众多的运算符号中,除了本章最后一小节将要谈到的逗号运算符,赋值号=运算级别为倒数第二,因逗号运算符在表达式中较少用到,所以当表达式中出现=时,通常它是最后处理的,另外注意:赋值号=的运算方向为自右向左,即先算右边式子的值,然后再将其值赋给左边的变量.赋值运算符的用法: 例子a=1; /* 将整型常量1放入a对应的内存单元中,所谓的赋值*/b=a+1; /* 将变量a中存放的值加上1的和,存入变量b中*/c=a+b; /*将变量a和变量b中的值相加之和放入变量c中*/上面3个式子都是赋值语句(赋值表达式加上分号即为赋值语句)注意:当变量名出现在赋值号左边时,其代表变量所对应的内存空间;当出现在赋值号右边时,其代表变量所对应内存空间中存放的数据.上面例子读法: A=1;应读做将整型常量1赋给整型变量A,当然了,经过此句后变量A中将存放整数1.当执行到B=A+1;时,因A中已存放了1,所以此句等价于B=1+1;B中毫无疑问存放了2;依次类推,变量C中存放了3.a=a+1;/*当出现此句时,千万不要和数学中的式子混为一谈.在数学中此式子肯定不合法,不过在C语言中,此种形式的语句我们以后可要经常用到.其实质意思是:将变量a中存放的数据加1后,重新再赋给本身.经进上句后,变量a中的值肯定增1.上文中a赋初值为1,故此时a中将存放2.那么以前存放的1呢?哦,它已被新赋的2所覆盖.对于任意一个基本变量,同一时刻它只能存放一个数据,所以无论给其赋值多少次,它只能保留最后一次赋予的数据.此概念应牢记在心.*/错误的赋值格式 赋值号=的左边不允许出现常量或表达式形式(不包括合法的指针表达式)c=a+b=3; /*错误格式*/a+b=c; /*错误格式*/a=b=3=c; /*错误格式*/不能给未定义的变量(未开辟的空间)赋值. 通常为失误.如:int a;a=1;k=2; /*根本没定义变量k,何来赋值一说?编译错误!*/如:int a=1,b=c,c=3;/*在定义语句中,程序是按照你的代码书写顺序来逐个开辟空间的,给b赋值时,c变量还没产生呢,怎能使用?编译错误!当然了,换成int a=1,c=3,b=c;就万事大吉了.*/变量未明确赋值不能参与运算如: int a,b,c;c=a+b;/* a和b中存放了何值,你敢把它们加起来送给c?一个有不确定值参与的运算有什么实际意义呢?编译报警!*/运算符名称或含义使用形式结合方向说明1数组下标数组名常量表达式左到右()圆括号(表达式)/函数名(形参表).成员选择(对象)对象.成员名-成员选择(指针)对象指针-成员名2-负号运算符-表达式右到左单目运算符(类型)强制类型转换(数据类型)表达式+自增运算符+变量名/变量名+单目运算符-自减运算符-变量名/变量名-单目运算符*取值运算符*指针变量单目运算符&取地址运算符&变量名单目运算符!逻辑非运算符!表达式单目运算符按位取反运算符表达式单目运算符sizeof长度运算符sizeof(表达式)3/除表达式/表达式左到右双目运算符*乘表达式*表达式双目运算符%余数(取模)整型表达式/整型表达式双目运算符4+加表达式+表达式左到右双目运算符-减表达式-表达式双目运算符5左移变量右移变量表达式双目运算符6大于表达式表达式左到右双目运算符=大于等于表达式=表达式双目运算符小于表达式表达式双目运算符=小于等于表达式=表达式双目运算符7=等于表达式=表达式左到右双目运算符!=不等于表达式!= 表达式双目运算符8&按位与表达式&表达式左到右双目运算符9按位异或表达式表达式左到右双目运算符10|按位或表达式|表达式左到右双目运算符11&逻辑与表达式&表达式左到右双目运算符12|逻辑或表达式|表达式左到右双目运算符13?:条件运算符表达式1? 表达式2: 表达式3右到左三目运算符14=赋值运算符变量=表达式右到左/=除后赋值变量/=表达式*=乘后赋值变量*=表达式%=取模后赋值变量%=表达式+=加后赋值变量+=表达式-=减后赋值变量-=表达式=左移后赋值变量=右移后赋值变量=表达式&=按位与后赋值变量&=表达式=按位异或后赋值变量=表达式|=按位或后赋值变量|=表达式15,逗号运算符表达式,表达式,左到右从左向右顺序运算总结下:一般是先从个体的计算开始(自加自减 取非取负),然后两个之间运算(乘除加减)最后是赋值。顺序除了!,+,-,-,(转换)这类自身的运算符,和?还有=,都是左至右结合。具体还是见表格吧然后还有0和0是逻辑非,其余都可以表示逻辑是习题一、1 void main()2 3 inta=1,b=2,c=3,x;4 x=-a+b*-c; /-1+(2*(2)=35 printf(%d,x);6 习题二、7 int a,b,i,j;8 i=5,j=5;910 a=-+i; /-(+i)11 b=-j+; /-(j+)1213 printf(%dn,a); /-614 printf(%dn,b); /-515 printf(%dn,i); /616 printf(%dn,j); /6习题三、void main()int i=8;printf(%d/n,+i);printf(%d/n,-i);printf(%d/n,i+);printf(%d/n,i-);printf(%d/n,-i+);printf(%d/n,-i-); i-8i-i+1i-i-1i-i+1i-i-1i-i+1i-i-1 int i=8;printf(%d/n,+i);printf(%d/n,-i);printf(%d/n,i+);printf(%d/n,i-);printf(%d/n,-i+);printf(%d/n,-i-); i的初值为8第2行i加1后输出故为9;第3行减1后输出故为8;第4行输出i为8之后再加1(为9);第5行输出i为9之后再减1(为8) ;第6行输出-8之后再加1(为9);第7行输出-9之后再减1(为8)习题四、void main()int i=5,j=5,p,q;p=(i+)+(i+)+(i+);q=(+j)+(+j)+(+j);printf(%d,%d,%d,%d,p,q,i,j);i-5,j-5,p-0,qp,i+1-i,i+1-i,i+1-ij+1-j,j+1-j,j+1-j,j+j+j-q int i=5,j=5,p,q;p=(i+)+(i+)+(i+);q=(+j)+(+j)+(+j); 这个程序中,对P=(i+)+(i+)+(i+)应理解为三个i相加,故P值为15。然后i再自增1三次相当于加3故

温馨提示

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

评论

0/150

提交评论