2.3运算符和表达式学习培训模板课件.ppt

上传人(卖家):林田 文档编号:4094615 上传时间:2022-11-10 格式:PPT 页数:38 大小:87KB
下载 相关 举报
2.3运算符和表达式学习培训模板课件.ppt_第1页
第1页 / 共38页
2.3运算符和表达式学习培训模板课件.ppt_第2页
第2页 / 共38页
2.3运算符和表达式学习培训模板课件.ppt_第3页
第3页 / 共38页
2.3运算符和表达式学习培训模板课件.ppt_第4页
第4页 / 共38页
2.3运算符和表达式学习培训模板课件.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

1、l2.3.1 2.3.1 l2.3.2 2.3.2 算术运算符算术运算符l2.3.3 2.3.3 赋值运算符赋值运算符l2.3.4 2.3.4 不同数据类型数据间的混合运算不同数据类型数据间的混合运算l2.3.5 2.3.5 关系运算符关系运算符l2.3.6 2.3.6 逻辑运算符逻辑运算符l2.3.7 2.3.7 增增1/1/减减1 1运算符运算符l2.3.8 2.3.8 位逻辑运算符位逻辑运算符l2.3.9 2.3.9 其它运算符其它运算符l表达式的概念表达式的概念 表达式是用运算符与圆括号将操作数连接起来所表达式是用运算符与圆括号将操作数连接起来所构成的式子。构成的式子。C语言的操作数包

2、括常量、变量、函数值语言的操作数包括常量、变量、函数值等。等。根据表达式进行运算,得到的数值即为表达式的解。根据表达式进行运算,得到的数值即为表达式的解。l表达式与简单语句表达式与简单语句 在在C语言中,在一个表达式的后面加上分号语言中,在一个表达式的后面加上分号“;”就构成了简单语句。就构成了简单语句。有意义的简单语句有意义的简单语句 无无意义的简单语句意义的简单语句 l种类及运算种类及运算 +-*/%注意注意:v 两个整数相除,结果仍为整数,商向下取整。两个整数相除,结果仍为整数,商向下取整。v 取模运算符取模运算符%实际上是数学运算的求余数运算,实际上是数学运算的求余数运算,其两个操作对

3、象都必须是整数其两个操作对象都必须是整数。v 减法运算符还可以用做单目运算符,是取负减法运算符还可以用做单目运算符,是取负v运算。其余操作符均为双目运算符。运算。其余操作符均为双目运算符。l算术表达式及算术运算符的优先级算术表达式及算术运算符的优先级 算术表达式就是用算术运算符和圆括号将算术表达式就是用算术运算符和圆括号将操作数连接起来的式子。算术表达式的解就是操作数连接起来的式子。算术表达式的解就是经过算术运算得到的表达式的值。经过算术运算得到的表达式的值。算术运算符的优先级与数学基本相同,即算术运算符的优先级与数学基本相同,即先乘除,后加减。取模运算的优先级与乘除相先乘除,后加减。取模运算

4、的优先级与乘除相同。函数和圆括号的优先级最高。同。函数和圆括号的优先级最高。注意:注意:v 算术表达式应能正确的表达数学公式。算术表达式应能正确的表达数学公式。例如:数学表达式是例如:数学表达式是 3+x3+x 2a 2a 相应的相应的C C语言表达式应该是什么呢?语言表达式应该是什么呢?v 算术表达式的结果应该不超过其所能表示的算术表达式的结果应该不超过其所能表示的 数的范围。例如,最大的整型数是数的范围。例如,最大的整型数是3276732767,那么,那么,32767+332767+3就不会是正确的结果。而就不会是正确的结果。而 32767L+332767L+3的结果是正确的,因为的结果是

5、正确的,因为32767L32767L是长是长 整型数。整型数。l算术运算符的结合性算术运算符的结合性 运算符的结合性是指如果一个操作数左边和运算符的结合性是指如果一个操作数左边和右边的两个运算符的优先级相同,应该优先计算右边的两个运算符的优先级相同,应该优先计算的操作符。的操作符。例如:例如:a+b-c 操作数操作数b左右的运算符左右的运算符+和和-的优先级相同,的优先级相同,那么,是先计算那么,是先计算b-c,还是先计算,还是先计算a+b呢?呢?C语言语言规定双目算术运算符的结合性是自左至右,也就规定双目算术运算符的结合性是自左至右,也就是是b先与左边先与左边a结合,再与右边结合,再与右边c

6、结合。所以是先结合。所以是先计算计算a+b,然后用,然后用a+b的结果减的结果减c。双目运算符的结合性与数学运算并无不同。双目运算符的结合性与数学运算并无不同。l普通赋值运算符普通赋值运算符 赋值表达式的一般形式是:赋值表达式的一般形式是:变量名变量名=表达式表达式 赋值语句的一般形式是:赋值语句的一般形式是:变量名变量名=表达式;表达式;赋值运算符的优先级小于算术运算符。赋值运算符的优先级小于算术运算符。赋值运算符的结合性是自右至左,赋值运算符的结合性是自右至左,以以a=b=2为例为例 l复合赋值运算符复合赋值运算符 把赋值运算符与算术、位逻辑、移位运算把赋值运算符与算术、位逻辑、移位运算符

7、放在一起,就构成复合赋值运算符。符放在一起,就构成复合赋值运算符。复合算术赋值运算符有复合算术赋值运算符有5个个+=、-=、*=、/=、%=。还有与移位和位逻辑结合的复合赋值运算符还有与移位和位逻辑结合的复合赋值运算符5个(个(=、&=、=、|=)。)。复合赋值运算符的使用规则是:复合赋值运算符的使用规则是:Xop=YXop=Y与与X=XopYX=XopY等价。等价。l 自动转换自动转换 l 强制转换强制转换 l 赋值表达式的类型转换赋值表达式的类型转换 自动转换自动转换 所谓所谓“自动转换自动转换”就是系统根据规则自动就是系统根据规则自动将将两个不同数据类型的运算对象转换成同一种数两个不同数

8、据类型的运算对象转换成同一种数据类型的过程。而且,对某些数据类型,即使据类型的过程。而且,对某些数据类型,即使是两个运算对象的数据类型完全相同,也要做是两个运算对象的数据类型完全相同,也要做转换,例如转换,例如float。float double 高 long unsigned char、short int 低 强制转换强制转换 在在C语言中,允许程序员根据自己的意愿将语言中,允许程序员根据自己的意愿将一种数据类型强制转换成另一种数据类型。一种数据类型强制转换成另一种数据类型。强制转换的格式为:强制转换的格式为:(数据类型名数据类型名)操作对象操作对象注意注意,强制转换并不改变操作对象的数据类

9、型,强制转换并不改变操作对象的数据类型和数值。例如,和数值。例如,(int)f的确切含义是将的确切含义是将f转换成转换成为整型值参与运算,而为整型值参与运算,而f本身的数据类型和数本身的数据类型和数值都没有任何改变。值都没有任何改变。赋值表达式的类型转换赋值表达式的类型转换 当赋值运算符左边的变量与赋值运算符右当赋值运算符左边的变量与赋值运算符右边的表达式的数据类型相同时,不需要进行数边的表达式的数据类型相同时,不需要进行数据类型的转换。据类型的转换。当赋值运算符左边的变量与赋值运算符右当赋值运算符左边的变量与赋值运算符右边的表达式的数据类型不相同时,系统负责将边的表达式的数据类型不相同时,系

10、统负责将右边的数据类型转换成左边的数据类型。此时,右边的数据类型转换成左边的数据类型。此时,会有两种情况产生,一种是转换以后会丢失数会有两种情况产生,一种是转换以后会丢失数据,另一种是转换以后不会丢失数据。这与赋据,另一种是转换以后不会丢失数据。这与赋值号两边的表达式的数据类型所占的字节数及值号两边的表达式的数据类型所占的字节数及存储表示方式有关。存储表示方式有关。(详细内容自学)详细内容自学)例例3.1#include stdio.hvoid main()int c;/*char c;*/c=B;printf(c=%c,c+a-A);运行结果:运行结果:c=b例例3.2#include st

11、dio.hvoid main()char c;int i=0 x3241;printf(i=%cn,i);c=i;printf(c=%dn,c);printf(i=%dn,i);运行结果运行结果i=Ac=65i=12865l 所谓关系运算,实际上就是比较两个数值所谓关系运算,实际上就是比较两个数值的大小。那么,比较两个数值的大小的运算符的大小。那么,比较两个数值的大小的运算符就是关系运算符。就是关系运算符。关系运算符有六个关系运算符有六个、=、z;j=xyz;printf(%2d,%2d,i,j);printf(%2d,zy=3);printf(%2d,y+z=z+1);运行结果为:运行结果为

12、:1,0,0,0,1 如果将如果将“与、或、非与、或、非”运算应用于逻辑值运算应用于逻辑值(逻辑真和逻辑假)则称为逻辑运算。(逻辑真和逻辑假)则称为逻辑运算。C语言中的逻辑运算符有三个:语言中的逻辑运算符有三个:逻辑与逻辑与&、逻辑或、逻辑或|和逻辑非和逻辑非!其中逻辑与和逻辑或是双目运算符,而逻辑其中逻辑与和逻辑或是双目运算符,而逻辑非是单目运算符。非是单目运算符。A B!A!B A&B A|B 逻辑真 逻辑真 逻辑假 逻辑假 逻辑真 逻辑真 逻辑真 逻辑假 逻辑假 逻辑真 逻辑假 逻辑真 逻辑假 逻辑真 逻辑真 逻辑假 逻辑假 逻辑真 逻辑假 逻辑假 逻辑真 逻辑真 逻辑假 逻辑假 逻辑运

13、算的规则与二进制的位逻辑是相逻辑运算的规则与二进制的位逻辑是相似的。似的。逻辑运算的规则下表:逻辑运算的规则下表:C语言系统对任何非语言系统对任何非0值都认定为是逻辑值都认定为是逻辑真,而将真,而将0认定为逻辑假。认定为逻辑假。如果一个表达式参与逻辑运算,只要这个如果一个表达式参与逻辑运算,只要这个表达式的解为非表达式的解为非0,则系统就认为这个表达式,则系统就认为这个表达式的结果是逻辑真。的结果是逻辑真。但是要注意,系统逻辑运算的结果仍然只但是要注意,系统逻辑运算的结果仍然只有两个:有两个:1(逻辑真)和(逻辑真)和0(逻辑假)。(逻辑假)。逻辑运算符经常与关系运算符一起使用。逻辑运算符经常

14、与关系运算符一起使用。C C语言表达式语言表达式(x=10)&(x=10)&(x=100)的数学含的数学含义是:义是:1010 x x100100 逻辑运算符的优先级逻辑运算符的优先级 !&|高高 低低 !的优先级高于算术运算符(当然也高于!的优先级高于算术运算符(当然也高于关系运算符)和赋值运算符关系运算符)和赋值运算符&和和|的优先级高于赋值运算符,但是低的优先级高于赋值运算符,但是低于算术运算符和关系运算符。于算术运算符和关系运算符。!单目运算符,其结合性是自右至左;!单目运算符,其结合性是自右至左;&和和|的结合性是自左至右。的结合性是自左至右。计算表达式计算表达式79-!079-!0

15、的值的值 注意注意:在在C C语言中,如果逻辑运算符的左操作数语言中,如果逻辑运算符的左操作数已经能够确定表达式的解,则系统不再计算右已经能够确定表达式的解,则系统不再计算右操作数的值。操作数的值。x=1&y=0 x=1&y=0 若若x x此时不为此时不为1 1,在检测,在检测x=1x=1以后,就不以后,就不会再检测会再检测y=0y=0。因为。因为x=1x=1的结果是逻辑假,逻的结果是逻辑假,逻辑假与任何数进行逻辑与操作结果都会是逻辑辑假与任何数进行逻辑与操作结果都会是逻辑假。假。x=y|x=0 若若x=y成立,则表达式的值为真,不需要继成立,则表达式的值为真,不需要继续做续做x=0了。但是,

16、若了。但是,若x=y不成立,由于不成立,由于x=0是是个赋值表达式,表达式的结果很可能是错误的。个赋值表达式,表达式的结果很可能是错误的。假设该表达式计算以前,假设该表达式计算以前,x值为,值为,y的值为,的值为,x=y的计算结果是,这时需要执行赋值的计算结果是,这时需要执行赋值x=0,表达式的结果仍然是,而实际上这时的表达式的结果仍然是,而实际上这时的x和和y的值均为,又满足了的值均为,又满足了x=y,这不是产生了矛,这不是产生了矛盾吗?盾吗?不要在一般的表达式中夹杂赋值运算不要在一般的表达式中夹杂赋值运算 +和和-。这两个运算符都是单目运算符,其功能分别这两个运算符都是单目运算符,其功能分

17、别是将变量自身的内容增是将变量自身的内容增1和减和减1。+i和和-i是前缀表示法,是前缀表示法,i+和和i-是后缀表是后缀表示法。如果直接在示法。如果直接在+i和和i+的后面加上分号构的后面加上分号构成成C的执行语句,即的执行语句,即+i;和和i+;前缀与前缀与后缀并无区别(减符号也一样)。但是,将后缀并无区别(减符号也一样)。但是,将它们用在表达式中则前缀与后缀是有区别的。它们用在表达式中则前缀与后缀是有区别的。前缀表示法是先将前缀表示法是先将i值增值增/减减1,再在表达,再在表达式中使用;而后缀表示法是先在表达式中使式中使用;而后缀表示法是先在表达式中使用用i的值,再将的值,再将i值增值增

18、/减减1。例如:例如:i=3;i=3;j=i+;j=+i;结果结果 j的内容为的内容为3 j的内容为的内容为4 i的内容为的内容为4 i的内容为的内容为4 注意:注意:v 增增1/1/减减1 1运算符的操作对象是一个变量运算符的操作对象是一个变量 2+2+、-2-2以及以及(x/y)+(x/y)+均为非法均为非法v 增增1/1/减减1 1运算符的优先级高于算术运算符,运算符的优先级高于算术运算符,与单目运算符与单目运算符-(取负)、!(逻辑非)的(取负)、!(逻辑非)的 优先级相同,结合方向自右至左。优先级相同,结合方向自右至左。例如表达式例如表达式 -i+-i+等价于等价于 -(i+)-(i

19、+)v副作用:副作用:printf(“%d,%d”,i,i+);在不同在不同 的编译环境下结果有可能不同。的编译环境下结果有可能不同。v尽量不要在一般的表达式中将增尽量不要在一般的表达式中将增1/1/减减1 1运算运算 符与其它运算符混合使用。符与其它运算符混合使用。&|按位取反按位取反 左移左移 右移右移 按位与按位与 按位或按位或 按位异或按位异或 操作数在实现位操作时按二进制进行运算,操作数在实现位操作时按二进制进行运算,7 7一般应为无符号型整数。一般应为无符号型整数。按位与按位与&按位与的运算规则是:按位与的运算规则是:0&0=0 0&1=0 1&0=0 1&1=1例如:例如:cha

20、r w1,w2,w3;w1=10;w2=8;w3=w1&w2;w3的内容可以通过下式运算:的内容可以通过下式运算:00001010 00001000 (按位与(按位与&)00001000 (结果)(结果)&运算经常用于把特定位清零(屏蔽)。运算经常用于把特定位清零(屏蔽)。例如,例如,a的值为的值为11011010,b的值为的值为11110000,a&b 11011010&11110000 11010000 相当于把相当于把a的低的低4位屏蔽,高位屏蔽,高4位不变。位不变。按位或按位或|按位或的运算规则是:按位或的运算规则是:0|0=0 0|1=1 1|0=1 1|1=1例如:例如:char

21、w1,w2,w3;w1=10;w2=8;w3=w1|w2;w3的内容可以通过下式运算:的内容可以通过下式运算:00001010 00001000 (按位或(按位或|)00001010 (结果)(结果)按位异或按位异或按位或的运算规则是:按位或的运算规则是:0 0=0 0 1=1 1 0=1 1 1=0例如:例如:char w1,w2,w3;w1=10;w2=8;w3=w1w2;w3的内容可以通过下式运算:的内容可以通过下式运算:00001010 00001000 (按位异或(按位异或)00000010 (结果)(结果)按位取反按位取反 按位取反的规则是:按位取反的规则是:0=1 1=0注意:注

22、意:对于位逻辑反来说,对于位逻辑反来说,0 x7在在16位机上的位机上的表示是表示是1111111111111000即即0 xfff8,但在,但在32位位机上的表示是机上的表示是0 xfffffff8,所以通常用,所以通常用0 x7 来表来表示示7的逻辑非,而不用的逻辑非,而不用0 xfff8或或oxfffffff8。移位运算符移位运算符 左移左移 双目运算符,运算符右边的表达式表示移位双目运算符,运算符右边的表达式表示移位的位数。的位数。x=x2 表示把表示把x进行左移以后赋值给进行左移以后赋值给x,注意注意 不能只用不能只用x2 左移可以扩大原数的倍数,左移位扩大左移可以扩大原数的倍数,左

23、移位扩大倍,左移位扩大倍,倍,左移位扩大倍,。右移可以缩小。右移可以缩小原数的倍数。右移时,若符号位为,则右边原数的倍数。右移时,若符号位为,则右边填零。若符号位为填零。若符号位为,根据机器不同分为算术根据机器不同分为算术移位(填充)逻辑移位(填充)。移位(填充)逻辑移位(填充)。逗号运算符逗号运算符 表达式表达式1 1,表达式,表达式2 2 逗号表达式的求值过程是:先求解表达式逗号表达式的求值过程是:先求解表达式1 1,再求解表达式再求解表达式2 2,并将表达式,并将表达式2 2的解作为逗号表达的解作为逗号表达式的解。式的解。例如例如5,6 的值是的值是6 z=(y=3,x*y)与与z=x*

24、(y=3)是等价的是等价的 逗号运算符一般用于循环逗号运算符一般用于循环for语句,不提倡使语句,不提倡使用在其它的表达式中。用在其它的表达式中。求字节数运算符求字节数运算符 sizeof是一个比较特殊的单目运算符,也是一个比较特殊的单目运算符,也是一个非常有用的运算符,经常用于动态分是一个非常有用的运算符,经常用于动态分配空间。配空间。其语法格式为:其语法格式为:sizeof(表达式表达式)表达式可以是变量名、常量、以及数据表达式可以是变量名、常量、以及数据类型名。类型名。它的功能是:求表达式中变量名所代表的它的功能是:求表达式中变量名所代表的存储单元所占的字节数;或是求表达式中常量存储单元

25、所占的字节数;或是求表达式中常量的存储单元所占的字节数;或是求表达式中的的存储单元所占的字节数;或是求表达式中的数据类型表示的数据在内存单元中所占的字节数据类型表示的数据在内存单元中所占的字节数。数。sizeof(int)的结果是的结果是2,sizeof运算符比较灵活,同样是求整型运算符比较灵活,同样是求整型int数据所占的字节数,可以使用三种办法:数据所占的字节数,可以使用三种办法:(1)求求sizeof(int)(2)求求sizeof(10)(3)使用使用int a;求求sizeof(a)例例3.5 求各种有数据类型在内存中所占的位(求各种有数据类型在内存中所占的位(bit)数。)数。#include stdio.hvoid main(c)printf(char=%d bitn,8*sizeof(char);printf(short int=%d bitn,8*sizeof(short int);printf(int=%d bitn,8*sizeof(10);printf(long int=%d bitn,8*sizeof(10L);printf(float=%d bitn,8*sizeof(float);printf(double=%d bitn,8*sizeof(2.3);printf(china=%d bitn,8*sizeof(china);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(2.3运算符和表达式学习培训模板课件.ppt)为本站会员(林田)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|