c语言运算符基础.doc

上传人:cl****1 文档编号:543046908 上传时间:2023-08-29 格式:DOC 页数:8 大小:120.51KB
返回 下载 相关 举报
c语言运算符基础.doc_第1页
第1页 / 共8页
c语言运算符基础.doc_第2页
第2页 / 共8页
c语言运算符基础.doc_第3页
第3页 / 共8页
c语言运算符基础.doc_第4页
第4页 / 共8页
c语言运算符基础.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《c语言运算符基础.doc》由会员分享,可在线阅读,更多相关《c语言运算符基础.doc(8页珍藏版)》请在金锄头文库上搜索。

1、C语言的运算符不仅具有不同的优先级, 而且还有一个特点,就是它的结合性。在表达式中, 各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的制约, 以便确定是自左向右进行运算还是自右向左进行运算。 这种结合性是其它高级语言的运算符所没有的,因此也增加了C语言的复杂性。运算符的种类C语言的运算符可分为以下几类:1.算术运算符用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(+)、自减(-)共七种。2.关系运算符用于比较运算。包括大于()、小于(=)、小于等于(=)和不等于(!=)六种。3.逻辑运算符用于逻辑运算。包括与(&)、或(

2、|)、非(!)三种。4.位操作运算符参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非()、位异或()、左移()六种。5.赋值运算符用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,=,=,=)三类共十一种。6.条件运算符这是一个三目运算符,用于条件求值(?:)。7.逗号运算符用于把若干表达式组合成一个表达式(,)。8.指针运算符用于取内容(*)和取地址(&)二种运算。9.求字节数运算符用于计算数据类型所占的字节数(sizeof)。10.特殊运算符有括号(),下标,成员(,.)等几种。优先级和结合性 C语言中,运算符的运

3、算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。 而在一个运算量两侧的运算符优先级相同时, 则按运算符的结合性所规定的结合方向处理。 C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与“-”号结合, 执行x-y运算,然后再执行+z的运算。这种自左至右的结合方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。 最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算。 C语言运算符中

4、有不少为右结合性,应注意区别,以避免理解错误。C语言中赋值运算符为=,由其参与的表达式即称为赋值表达式.基本表达式如下:变量名=表达式(即将右边表达式的值赋给左边的变量)赋值号=的左边量必须为变量(或其它代表此变量的等价表达式 指针)既然=为运算符号,那么显然有它的运算级别和所谓的运算方向.在C语言众多的运算符号中,除了本章最后一小节将要谈到的逗号运算符,赋值号=运算级别为倒数第二,因逗号运算符在表达式中较少用到,所以当表达式中出现=时,通常它是最后处理的,另外注意:赋值号=的运算方向为自右向左,即先算右边式子的值,然后再将其值赋给左边的变量.赋值运算符的用法: 例子a=1; /* 将整型常量

5、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;/*当出现此句时,千万

6、不要和数学中的式子混为一谈.在数学中此式子肯定不合法,不过在C语言中,此种形式的语句我们以后可要经常用到.其实质意思是:将变量a中存放的数据加1后,重新再赋给本身.经进上句后,变量a中的值肯定增1.上文中a赋初值为1,故此时a中将存放2.那么以前存放的1呢?哦,它已被新赋的2所覆盖.对于任意一个基本变量,同一时刻它只能存放一个数据,所以无论给其赋值多少次,它只能保留最后一次赋予的数据.此概念应牢记在心.*/错误的赋值格式 赋值号=的左边不允许出现常量或表达式形式(不包括合法的指针表达式)c=a+b=3; /*错误格式*/a+b=c; /*错误格式*/a=b=3=c; /*错误格式*/不能给未定

7、义的变量(未开辟的空间)赋值. 通常为失误.如: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数组下标数组名常量表达式左到右()圆括号(表达式)/函

8、数名(形参表).成员选择(对象)对象.成员名-成员选择(指针)对象指针-成员名2-负号运算符-表达式右到左单目运算符(类型)强制类型转换(数据类型)表达式+自增运算符+变量名/变量名+单目运算符-自减运算符-变量名/变量名-单目运算符*取值运算符*指针变量单目运算符&取地址运算符&变量名单目运算符!逻辑非运算符!表达式单目运算符按位取反运算符表达式单目运算符sizeof长度运算符sizeof(表达式)3/除表达式/表达式左到右双目运算符*乘表达式*表达式双目运算符%余数(取模)整型表达式/整型表达式双目运算符4+加表达式+表达式左到右双目运算符-减表达式-表达式双目运算符5左移变量右移变量表达

9、式双目运算符6大于表达式表达式左到右双目运算符=大于等于表达式=表达式双目运算符小于表达式表达式双目运算符=小于等于表达式=表达式双目运算符7=等于表达式=表达式左到右双目运算符!=不等于表达式!= 表达式双目运算符8&按位与表达式&表达式左到右双目运算符9按位异或表达式表达式左到右双目运算符10|按位或表达式|表达式左到右双目运算符11&逻辑与表达式&表达式左到右双目运算符12|逻辑或表达式|表达式左到右双目运算符13?:条件运算符表达式1? 表达式2: 表达式3右到左三目运算符14=赋值运算符变量=表达式右到左/=除后赋值变量/=表达式*=乘后赋值变量*=表达式%=取模后赋值变量%=表达式

10、+=加后赋值变量+=表达式-=减后赋值变量-=表达式=左移后赋值变量=右移后赋值变量=表达式&=按位与后赋值变量&=表达式=按位异或后赋值变量=表达式|=按位或后赋值变量|=表达式15,逗号运算符表达式,表达式,左到右从左向右顺序运算总结下:一般是先从个体的计算开始(自加自减 取非取负),然后两个之间运算(乘除加减)最后是赋值。顺序除了!,+,-,-,(转换)这类自身的运算符,和?还有=,都是左至右结合。具体还是见表格吧然后还有0和0是逻辑非,其余都可以表示逻辑是习题一、1 void main()2 3 inta=1,b=2,c=3,x;4 x=-a+b*-c; /-1+(2*(2)=35 p

11、rintf(%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

12、-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

13、,%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故i的最后值为8。而对于q 的值则不然,q=(+j)+(+j)+(+j)应理解为q先自增1,再参与运算,由于q自增1三次后值为8,三个8相加的和为24,j的最后值仍为8。算术表达式表达式是由常量、变量、函数和运算符组合起来的式子。 一个表达式有一个值及其类型, 它们等于计算表达式所得结果的值和类型。表达式求值按运算符的优先级和结合性规定的顺序进行。 单个的常量、变量、函数可以看作是表达式的特例。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号