【C++从⼊门到熟练练习题】005表达式与运算符优先级
⽬录
⼀、前⾔
1、上节课回顾
上⼀次给⼤家讲了strlen和sizeof的区别,不仅仅在期末考试中,在以后写代码的过程中我们也会经常⽤到这两个来计算字符串的长度,所以⼤家⼀定要弄明⽩,不然以后很容易出错的。
今天主要给⼤家讲的就是表达式与运算符优先级的问题。这块对于初学C++的同学来说也是⼀块难点,希望⼤家能够⽤⼼学习。2、上节思考题答案
上节课让⼤家分析下⾯这⼏个字符串的长度
char a[] = "ab\0cd\5\\";
char a[10] = "ab\0cd\5\\";
char a[] = "ab\1cd\5\\";
答案如下:
字符串sizeof strlen
char a[] = "ab\0cd\5\\";82
char a[10] = "ab\0cd\5\\";102
char a[] = "ab\1cd\5\\";87
⼆、重点知识介绍
1、表达式
1.什么是表达式
表达式是由运算符和操作数组成的式⼦。例如:
1+2+3;
a = 4*5/6;
2.运算符
运算符包含:常量、变量、函数及⾃⼰命名的标识符。运算符优先级按从高到低排列
3.常见表达式
常见表达式有如下⼏种:
1.算术表达式
由算术运算符和位操作运算符组成的表达式,其值是算术值。类型由操作数决定。
⽰例如下:
6 * 5 / 3 - 4 + 5
2.逻辑表达式
由逻辑运算符组成的表达式。类型是bool型。
⽰例如下:
5 &&
6 && i++
3.关系表达式
由关系运算符组成的表达式。类型是bool型。
⽰例如下:
i != 5
4.赋值表达式
由赋值运算符组成的表达式。赋值运算符共有11种,⼀种基本的,11种复合的。
赋值运算符有两个很重要的特点:
(1)结合性从右到左。
(2)优先级较低,仅⾼于逗号表达式。
⽰例如下:
i += 5
5.条件表达式
由三⽬运算符组成的表达式。三⽬运算符的格式为:
a > b? a : b
6.逗号表达式
将若⼲表达式⽤逗号连接起来的表达式。
⽰例如下:
i-=3, i++
2、C++常⽤运算符优先级
1.运算符优先级表
下表为常见运算符名称及其使⽤优先级。
优先级运算符名称或含义使⽤形式结合⽅向说明
1[]数组下标数组名[整型表达式]
左到右()圆括号(表达式)/函数名(形参表)
.成员选择(对象)对象.成员名
->成员选择(指针)对象指针->成员名
2-负号运算符-算术类型表达式
右到左
单⽬运算符(type)强制类型转换(纯量数据类型)纯量表达式
++⾃增运算符++纯量类型可修改左值表达式单⽬运算符--⾃减运算符--纯量类型可修改左值表达式单⽬运算符*取值运算符*指针类型表达式单⽬运算符&取地址运算符&表达式单⽬运算符!逻辑⾮运算符!纯量类型表达式单⽬运算符~按位取反运算符~整型表达式单⽬运算符sizeof长度运算符
sizeof 表达式
sizeof(类型)
3/除表达式/表达式
左到右
双⽬运算符*乘表达式*表达式双⽬运算符%余数(取模)整型表达式%整型表达式双⽬运算符
4+加表达式+表达式
左到右
双⽬运算符-减表达式-表达式双⽬运算符
5<<;左移整型表达式<<;整型表达式
左到右
双⽬运算符>>右移整型表达式>>整型表达式双⽬运算符
6>⼤于表达式>表达式
左到右
双⽬运算符>=⼤于等于表达式>=表达式双⽬运算符<⼩于表达式<;表达式双⽬运算符<=⼩于等于表达式<=表达式双⽬运算符
7==等于表达式==表达式
左到右
双⽬运算符!=不等于表达式!= 表达式双⽬运算符
8&按位与整型表达式&整型表达式左到右双⽬运算符9^按位异或整型表达式^整型表达式左到右双⽬运算符10|按位或整型表达式|整型表达式左到右双⽬运算符11&&逻辑与表达式&&表达式左到右双⽬运算符12||逻辑或表达式||表达式左到右双⽬运算符13?:条件运算符表达式1? 表达式2: 表达式3右到左三⽬运算符=赋值运算符可修改左值表达式=表达式
14
右到左
/=除后赋值可修改左值表达式/=表达式 *=乘后赋值可修改左值表达式*=表达式 %=取模后赋值可修改左值表达式%=表达式 +=
加后赋值可修改左值表达式+=表达式 -=减后赋值可修改左值表达式-=表达式 <<=左移后赋值可修改左值表达式<<=表达式 >>=右移后赋值可修改左值表达式>>=表达式 &=按位与后赋值可修改左值表达式&=表达式 ^=按位异或后赋值可修改左值表达式^=表达式 |=
按位或后赋值可修改左值表达式|=表达式
15
,
逗号运算符
表达式,表达式,…
左到右从左向右顺序结合
2.重点说明
很多⼈有这个表遇到复杂的表达式还是不会计算,所以做如下说明。
1.分析表达式时,从左往右看;
2.先算优先级⾼的,再算优先级低的;
3.若是同级,看结合⽅向,若结合⽅向从左到右,先算左边再算右边;若结合⽅向从右到左,先算右边再算左边;
4.可以⽤⼩括号改变优先级;
5.使⽤逻辑与和逻辑或会有“短路”概念。
3.短路
逻辑与:当有⼀个是假,则最终为假,则a&&b中a为假时,b没有执⾏的必要,被短路。逻辑或:当有⼀个是真,则最终为真,则a || b中a为真时,b没有执⾏的必要,被短路。
4.⽰例
为帮助⼤家理解,特别举⼏个例⼦说明:
(1)!a && ++b //a = 8 , b = 2
从左往右看,逻辑⾮!是⼆级,⽐逻辑与(11级)⾼,先算 !a 是0,逻辑与,被短路,后⾯不操作,所以a还是8,b还是2。
使⽤ const 关键字声明常量格式如下:
(2)a += b += a+b; //a = 8 b = 2
从左往右看,+= 和+=同级,先算后⾯的,+的优先级⾼于 += ,则先算+,即上⾯代码先算a+b = 10;+=是从右向左结合,所以先计算 b += a+b,最后计算 a += b。所以上⾯式⼦与下⾯式⼦等价:
b += (a+b);
a += b;
最后b = 12 ,a = 20。
三、思考题
已知a = 12,b = 3。
分析下⾯表达式的值,以及a和b的值:
b||a-4&&a/b
b&&a*b&&a+b
a+b/(a+b)&&b++
a+=b*=a-=b/=a-b
思考题的答案会在下⼀次的【C++从⼊门到熟练练习题】中公布哦,希望⼤家能够多多练习。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论