其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

C++中运算符优先级的学习注解


发布日期:2019年09月09日
 
C++中运算符优先级的学习注解

提起运算符的优先级很多了解C++的过来人都会想这有什么难的?不就是谁的优先级高就算谁么确实如此运算符的优先级不是一个大问题但对于一个初学者来说却经常容易在上面迷糊与犯错而对于一个了解C++的人来说我相信也会偶尔在上面摔倒不信就继续往下读

优先级高的先运算带来的困惑

C++中运算符的优先级有一张表表里把运算符进行了分类这张表是不需要死记硬背的只要有个大致的轮廓就OK了例如应该记住最低优先级是逗号运算符其次是赋值运算符再其次是三目运算符而关系运算符的优先级高于逻辑运算符(不包括逻辑非运算)算术运算符的优先级高于关系运算符象++和﹣﹣的优先级比前面几个都高但最高的要属()了知道这些后你的脑海里一定有一条准则了优先级高的先运算那么下面看一个例子

int x=y=

!x&&x+y&&++y

上面的语句中出现了!&& +++这四个运算符那么问题来了到底先算谁呢?

有一个姓蔡的同学站起来说++运算符在这里面优先级最高理所应当最先算++既先计算++y再算!x再算x+y最后把它们&&起来按照蔡同学的思路第二步的结果是&&x+y&&由于&&是严格运算有一个为结果既为所以不需要计算x+y了整个语句的结果是按照上面蔡同学的说法执行完后y的值应该是这对不对呢?

一位姓高的同学站起来反驳道我觉得应该先计算!x如果值为假则不需要计算下去最后结果为假如果值为真再计算x+y同理如果其值为真再去计算++y否则最后结果也为假

蔡同学不服起来说高同学你觉得++和!谁的优先级高呢?高同学答道那当然是++高蔡同学接着问那为什么还要先计算!呢?高同学答不出来了

是呀为什么要先算!呢?

加括号确定优先级的方法

高同学说的是正确的为什么呢?下面我给大家解释一下当多个优先级不同的运算符在一起时为了不混淆可以先加上括号这样就分出层次了相同层次的考虑结合性问题当确定下来先算那块时再往这块里面深入例如上面的例子我们可以这样加上括号从左向右看由于!比&&优先级高所以有(!x)又由于&&比+优先级低所以有(x+y)而++优先级高于&&所以(++y)这样整个式子就变成了(!x)&&(x+y)&&(++y)最外层的是两个&&运算由于&&的结合性是从左至右所以上式可看成A&&B&&C先计算A再计算B最后算C由于x=则!x就为假后面的就不需要再算了整个语句的值为假执行完后y的值没变还是

所以碰到不清楚先算谁后算谁时先加个括号看看就明白了先后次序下面做一个加括号的练习给语句c=a>b?ab加括号此语句有三个运算符=>应该怎样加括号呢?

第一种方案c=((a>b)?ab)

第二种方案c=(a>(b?ab))

第三种方案(c=a)>(b?ab)

应该是那一种呢?按照运算符优先级的高低顺序>优先级高于=所以不可能把(c=a)括起来而>优先级高于? 运算符所以也不可能把(b?ab)括起来因此第一种答案正确

下面再看一个类似的例子

int i=j=k

k=i

猛然一看,有些人上来可能就要计算++i和++j了。tw.winGwit.Com这里不妨先加括号看看。从左至右看,<的优先级高于=而且又高于? :,所以有k=(i上一篇:delphi简单判断程序30秒没有键盘和鼠标动作示例

下一篇:我的Visual C++入门之路