《C运算符与表达式》PPT课件.ppt
《《C运算符与表达式》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《C运算符与表达式》PPT课件.ppt(53页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第3章 运算符与表达式运算符与表达式 运运算算符符(operator)也也称称为为操操作作符符,对对程程序序中中的的数数据据进进行行运运算。参与运算的数据称为操作数算。参与运算的数据称为操作数(operand)。变变量量、字字面面常常量量等等通通过过运运算算符符组组合合成成表表达达式式,一一个个表表达达式式也能作为操作数来构成更复杂的表达式。也能作为操作数来构成更复杂的表达式。表达式表达式(expression)是构成程序语句的基本要素。是构成程序语句的基本要素。3.1 基本运算符n n对于运算符,应注意以下几方面。(1)运算符的功能和语义。(2)运算符的操作数。每个运算符对其操作数的个数、类
2、型和值都有一定限制。(3)运算符的优先级(precedence)。每个运算符都有确定的优先级。(4)运算符的结合性(associativity)。表给出了C+中的主要运算符的功能、优先级、目数、结合性。表中按优先级从高到低分为16个级别。基本运算符基本运算符优先级优先级优先级优先级运算符运算符运算符运算符功能及说明功能及说明功能及说明功能及说明结合性结合性结合性结合性目数目数目数目数1 1()()改变运算优先级改变运算优先级改变运算优先级改变运算优先级左向右左向右左向右左向右双目双目双目双目:作用域解析、全局作用域解析、全局作用域解析、全局作用域解析、全局 数组下标数组下标数组下标数组下标.访
3、问成员,由指针访问成员访问成员,由指针访问成员访问成员,由指针访问成员访问成员,由指针访问成员2 2+-+-后缀自增、自减运算后缀自增、自减运算后缀自增、自减运算后缀自增、自减运算单目单目单目单目new deletenew delete动态分配或释放内存动态分配或释放内存动态分配或释放内存动态分配或释放内存+-+-前缀自增、自减运算符前缀自增、自减运算符前缀自增、自减运算符前缀自增、自减运算符*间接访问间接访问间接访问间接访问 dereferencedereference&取地址取地址取地址取地址 address-ofaddress-of+-+-正、负号正、负号正、负号正、负号!逻辑非逻辑非逻
4、辑非逻辑非按位取反按位取反按位取反按位取反sizeofsizeof取类型或变量的长度取类型或变量的长度取类型或变量的长度取类型或变量的长度(typetype)强制类型转换强制类型转换强制类型转换强制类型转换右向左右向左右向左右向左2*2*.*.*由成员指针访问成员由成员指针访问成员由成员指针访问成员由成员指针访问成员左向右左向右左向右左向右双目双目双目双目优先级优先级优先级优先级运算符运算符运算符运算符功能及说明功能及说明功能及说明功能及说明结合性结合性结合性结合性目数目数目数目数3 3*/%/%乘、除、取余乘、除、取余乘、除、取余乘、除、取余左向右左向右左向右左向右双目双目双目双目4 4+-
5、+-加、减加、减加、减加、减左向右左向右左向右左向右双目双目双目双目5 5左移位、右移位左移位、右移位左移位、右移位左移位、右移位左向右左向右左向右左向右双目双目双目双目6 6 =小于、大于、小于等于、大小于、大于、小于等于、大小于、大于、小于等于、大小于、大于、小于等于、大于等于于等于于等于于等于左向右左向右左向右左向右双目双目双目双目7 7=!=!=等于、不等于等于、不等于等于、不等于等于、不等于左向右左向右左向右左向右双目双目双目双目8 8&按位与按位与按位与按位与左向右左向右左向右左向右双目双目双目双目9 9按位异或按位异或按位异或按位异或左向右左向右左向右左向右双目双目双目双目101
6、0|按位或按位或按位或按位或左向右左向右左向右左向右双目双目双目双目1111&逻辑与逻辑与逻辑与逻辑与左向右左向右左向右左向右双目双目双目双目1212|逻辑或逻辑或逻辑或逻辑或左向右左向右左向右左向右双目双目双目双目1313?:?:条件运算条件运算条件运算条件运算右向左右向左右向左右向左三目三目三目三目1414=*=/=%=*=/=%=+=-=+=-=&=|=&=|=赋值运算赋值运算赋值运算赋值运算右向左右向左右向左右向左双目双目双目双目1515,逗号运算逗号运算逗号运算逗号运算左向右左向右左向右左向右双目双目双目双目3.1.1 算术运算符 +、-(正号、负号,单目运算)(正号、负号,单目运算
7、)+、-、*、/、%(双目运算)(双目运算)+、-、*、/按通常的算术规定。按通常的算术规定。注意:注意:对于除,若两个操作数都是整数,结果为整数(商部分)。对于除,若两个操作数都是整数,结果为整数(商部分)。1/2=0 5/2=2%通常称为取模运算,两个操作数必须都是整型数,结果为余通常称为取模运算,两个操作数必须都是整型数,结果为余数,数,余数的符号与左边数的符号等同。余数的符号与左边数的符号等同。3%2=1 -3%2=-1 3%-2=1 -3%-2=-1 8%4=0 在算术运算中需要注意溢出问题。在算术运算中需要注意溢出问题。n n两个整数做加法、减法或乘法运算时,即两个整数做加法、减法
8、或乘法运算时,即便结果溢出也不是错误。便结果溢出也不是错误。例如:例如:short s1=32765;s1=s1+3;/结果是否结果是否超过超过short的最大值?的最大值?couts1endl;/输出输出-32768,而不是,而不是32768。实际上,。实际上,观察二进制数据,这两个值是一样的。观察二进制数据,这两个值是一样的。3.1.2 关系运算关系运算 、=、=、!=与与=:注意:注意:a=5 赋值运算;赋值运算;a=5;判断是否相等判断是否相等 a=x2 0ab+c 0a=2 1aA b=a+1c-a=aa=a 0aa 0b=a=2 1n n关系运算符的优先级为关系运算符的优先级为(括
9、弧中运算符的优先级相括弧中运算符的优先级相同同):(、=、=)b=c;/d=a b=c;/等价于等价于d=(a b)d=(a b)=c);d=c);d的值为的值为0 0 d=a=b c;/d=a=b c;/等价于等价于d=(a=(b d=(a=(b b b b)d=(a b)=c);d 5;bool b=a 5;n n由于浮点数在计算机内进行运算和存储时会产生误差,因此在比较两由于浮点数在计算机内进行运算和存储时会产生误差,因此在比较两个浮点数时,建议不要直接比较两数是否相等。例如,执行下面语句:个浮点数时,建议不要直接比较两数是否相等。例如,执行下面语句:double d1=3.3333,d
10、2=4.4444;double d1=3.3333,d2=4.4444;if(d1+d2 =7.7777)if(d1+d2 =7.7777)coutcout相等相等endl;endl;elseelsecoutcout不等不等endl;endl;coutd1+d2endl;coutd1+d2endl;n n条件语句中用条件语句中用“=”=”来判断浮点数是否相等,结来判断浮点数是否相等,结果是不等,但果是不等,但d1+d2d1+d2输出结果却是。两个实型数输出结果却是。两个实型数即便输出结果完全一样,其内部值也可能不一样。即便输出结果完全一样,其内部值也可能不一样。判断两个实数是否相等的正确方法是
11、:判断两个判断两个实数是否相等的正确方法是:判断两个实数之差的绝对值是否小于一个给定的允许误差实数之差的绝对值是否小于一个给定的允许误差数,如判断数,如判断d1d1是否等于是否等于d2d2时,应改为:时,应改为:fabs(d1-d2)=1e-6 fabs(d1-d2)=1e-6 其中,其中,fabs()fabs()是计算绝对值的一个库函数,使用是计算绝对值的一个库函数,使用时要包含头文件。时要包含头文件。3.1.3 3.1.3 逻辑运算符逻辑运算符n n对逻辑值进行运算的运算符就是逻辑运算符。对逻辑值进行运算的运算符就是逻辑运算符。C+C+语言语言提供了提供了3 3个逻辑运算符,用于表示操作数
12、之间的逻辑关系,个逻辑运算符,用于表示操作数之间的逻辑关系,它们是它们是!(!(逻辑非逻辑非)、&(&(逻辑与逻辑与)、|(|(逻辑或逻辑或)。逻辑运算。逻辑运算的结果仍然是逻辑值。的结果仍然是逻辑值。n n逻辑非逻辑非(!)(!)是单目运算符,它对操作数进行取反运算。当操是单目运算符,它对操作数进行取反运算。当操作数为非作数为非0(0(逻辑真逻辑真)时,!运算后结果为时,!运算后结果为0(0(逻辑假逻辑假)。反之,。反之,若操作数为若操作数为0(0(逻辑假逻辑假),!运算后结果为运算后结果为1(1(逻辑真逻辑真)。n n注意,所有非注意,所有非0 0的值在逻辑上都作为的值在逻辑上都作为“真真
13、”。例如:。例如:cout!4 endl;cout!4 endl;/输出输出0 0,假,假 cout!-4 endl;cout!-4 endl;/输出输出0 0,假,假 cout!4.1endl;cout!4.1endl;/输出输出0 0,假,假 cout!-4.1endl;cout!-4.1 6)!(2 6)/结果为结果为1 1,真,真 7 3&10 6 7 3&10 6/结果为结果为1 1,真,真 5 2|4 8 5 2|4 8/结果为结果为1 1,真,真 4&5 6 4&5 6/结果为结果为1 1,真,真n n逻辑运算符的运算优先级为:逻辑运算符的运算优先级为:!高于高于&高于高于|。注
14、意,!的优先级具有较高优先级,甚至高于算注意,!的优先级具有较高优先级,甚至高于算术运算符。而术运算符。而&和和|的优先级则比算术运算符和的优先级则比算术运算符和关系运算符低。关系运算符低。n n因因C+C+将逻辑值保存为整数值,这样使得逻辑值将逻辑值保存为整数值,这样使得逻辑值可参与所有的运算,而且逻辑运算符可作用于所可参与所有的运算,而且逻辑运算符可作用于所有类型的值,而没有语法错误提示。这是有类型的值,而没有语法错误提示。这是C/C+C/C+语法不严密之处。读者应注意避免。语法不严密之处。读者应注意避免。例例3.1 3.1 逻辑运算符的例子。逻辑运算符的例子。include includ
15、e/A/A 注意,不是注意,不是using namespace std;using namespace std;/B/B 导入命名空间导入命名空间stdstdvoid main(void)void main(void)int a,b;int a,b;bool res1,res2,res3,res4,res5;bool res1,res2,res3,res4,res5;a=3;b=5;a=3;b=5;res1=a 3&b=5;res1=a 3&b=5;res2=a 3|b=5;res2=a 3|b=5;res3=!(b=5);res3=!(b=5);res4=!(a=b);res4=!(a=b)
16、;res5=a b&b b&b 6;cout boolalpha;cout boolalpha;/C/C cout res1=res1 t;cout res1=res1 t;cout res2=res2 t;cout res2=res2 t;cout res3=res3 t;cout res3=res3 t;cout res4=res4 t;cout res4=res4 t;cout res5=res5 endl;cout res5=res5 endl;3.1.4 位运算符n n位运算是指对字节内部的二进制位进行移位或逻辑运算。n n位运算是通过位运算符来完成的。n n位运算的操作数必须是ch
17、ar、short、或int值,而且结果也是char、short或int值。n n除了按位求反是单目运算符,其余位运算都是双目运算符。n nC+提供了两类位运算:移位运算和按位逻辑运算。1.1.移位运算符移位运算符n n移位运算符的格式为:移位运算符的格式为:operand n operand n operand n 将操作数将操作数operandoperand向右移动向右移动n n个二进制位,保持符个二进制位,保持符号不变。号不变。n n其中,其中,n n为整数。注意移位运算并不改变为整数。注意移位运算并不改变operandoperand本身的值。例如:本身的值。例如:short operan
18、d=0 x8,n=3;short operand=0 x8,n=3;short a=operand n;short a=operand n;/结果为结果为0 x400 x40n n操作数左移操作数左移n n个二进制位后,右边移出的空位用个二进制位后,右边移出的空位用0 0补齐。补齐。n n当左移时,对于带符号数,最高位表示符号,可能会因为低位的当左移时,对于带符号数,最高位表示符号,可能会因为低位的1 1或或0 0移到最高位,最终改变操作数的符号。如:移到最高位,最终改变操作数的符号。如:short s=4567;short s=4567;short result=s 3;short resu
19、lt=s 3;cout result;/cout result;/输出:输出:-29000-29000n n如果操作数是正数,而且左移没有导致改变符号,那么左移如果操作数是正数,而且左移没有导致改变符号,那么左移n n位,相位,相当于乘以当于乘以2n2n。n n我们知道,我们知道,intint型的数值范围是型的数值范围是-2-23131到到2 23131-1-1。下面代码利。下面代码利用左移位来得到用左移位来得到intint型的最小值和最大值。型的最小值和最大值。int min=1 31;int min=1 31;coutmin=minendl;coutmin=minendl;int max=
20、(1 31)-1;int max=(1 31)-1;coutmax=maxendl;coutmax=max m;short b=operand m;结果为结果为0 xf4b60 xf4b6,即,即-2890-2890n n对于移位运算,注意以下几点:对于移位运算,注意以下几点:(1)(1)不要尝试对不要尝试对floatfloat或或doubledouble数据进行移位运算,编译会出数据进行移位运算,编译会出错。错。(2)(2)移动位数移动位数n n应不大于左操作数的位数,如应不大于左操作数的位数,如intint移位应不大移位应不大于于3232。如果。如果n n大于左操作数位数,实际移动位数要自
21、动按大于左操作数位数,实际移动位数要自动按字长取模:字长取模:n%(sizeof(int)n%(sizeof(int)。例如,。例如,i33i33就是就是i i左移左移1 1位。位。(3)(3)当移动位数当移动位数n n为负值,为负值,C C语言规范没有确定是什么结果。语言规范没有确定是什么结果。在在VC6VC6中,左移中,左移负值位数,结果总为负值位数,结果总为0 0。(4)(4)左移位左移位与与coutcout与与cincin可可能混淆,可用括号消除这些错误,例如能混淆,可用括号消除这些错误,例如cout(k3)cout(k3)。n n按位逻辑运算符 按位逻辑运算有4个:求反、与&、或|、
22、异或。n n(1)按位求反“”运算符是一个单目运算符,对操作数逐位取反,得到反码。若二进制位为0,则取反后为1;若二进制位为1,则取反后为0。例如:short int m=0 xc3/结果为0 xff3c 运算符具有比较高的优先级,高于一般的算术运算符。而其它按位逻辑运算符的优先级则比较低。(2)(2)按位逻辑与按位逻辑与“&”&”对两个操作数逐位进行运算。对两个操作数逐位进行运算。若对应位都为若对应位都为1 1,则该位结果为,则该位结果为1 1,否则为,否则为0 0。例。例如:如:0 xc300000000110000110 x6e00000000010 xc3000000001100001
23、10 x6e0000000001101110a0000000001000010101110a0000000001000010short int a=0 xc3&0 x6eshort int a=0 xc3&0 x6e/结果为结果为0 x420 x42(3)(3)按位逻辑或按位逻辑或“|”|”对两个操作数逐位进行运算。对两个操作数逐位进行运算。若对应位都为若对应位都为0 0,则该位结果为,则该位结果为0 0,否则为,否则为1 1。例。例如:如:short int b=0 x12|0 x3d short int b=0 x12|0 x3d/结果为结果为0 x3f0 x3fn n(4)(4)按位逻辑
24、异或按位逻辑异或“”也是对两个操作数逐位进也是对两个操作数逐位进行运算。异或运算的规则是,若对应位不同,则行运算。异或运算的规则是,若对应位不同,则该位结果为该位结果为1 1,否则为,否则为0 0。例如:。例如:short int c=0 x5a 0 x26 short int c=0 x5a 0 x26/结果为结果为0 x7c0 x7c 按位逻辑异或有一个特点,如果按位逻辑异或有一个特点,如果a b=ca b=c,那么,那么c b=ac b=a。b b将将a a转换为转换为c c,也能将,也能将c c再复原为再复原为a a。显然,两个相等的值异或运算,结果为显然,两个相等的值异或运算,结果为
25、0 0。不相。不相等的两个值异或运算结果不为等的两个值异或运算结果不为0 0。3.1.5 3.1.5 条件运算符条件运算符n nC+C+中唯一的三目运算符就是条件运算符,由两个符号中唯一的三目运算符就是条件运算符,由两个符号“?”?”和和“:”:”组成,要求有组成,要求有3 3个操作数,形式如下:个操作数,形式如下:?:3 根据根据1为真或假,选择为真或假,选择2或或3作为运算作为运算结果。结果。(1)(1)条件表达式的执行顺序为:先求解表达式条件表达式的执行顺序为:先求解表达式1 1,若值为非,若值为非0 0,表示条件,表示条件为真,则求解表达式为真,则求解表达式2 2,此时表达式,此时表达
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C运算符与表达式 运算 表达式 PPT 课件
限制150内