今天老师讲作业,碰到下图第八题,按照老师的说法,++运算符的优先级大于关系运算符和逻辑运算符,所以这题的答案是a=4,b=6。但是我记得自己写过这个程序,结果并不是这样,然后又写了一次,如下图34。
依旧和老师讲的不一样,但是翻了书,后面的优先级确实是算数运算符大于&&运算符。
我想的是,&&运算符和||运算符都是先算左边再算右边,&&运算符算出左边为假就不会继续运算,后面的++a也就不执行,||同理。但是这样想就和书后面的运算顺序还有老师的说法矛盾了,&&运算符的优先级很低,所以求助大佬,这个该怎么理解。
int a=3;
int b=5;
a>b&&++a; //a>b不满足,所以++a不执行
a<b||++b; //a<b满足,所以++b也不执行
printf("%d %d", a, b); //所以还是3 5
和优先级没关系,你可以认为,条件表达式优化,导致部分表达式不求值,这个比任何优先级都高
上机验证
3 5
https://ideone.com/jMSAyH
你老师说的应该是这种的情况吧a=4,b=3;a==++b;的这种情况
https://zhidao.baidu.com/question/480139656.html
我以前也很纠结这样的问题,很想搞明白,其实没必要。
这就是让你深入理解运算符优先级而已,假设你不想记,那么用小括号把想有限处理的东西括起来
不论如何,小括号优先级最高,逻辑清晰
像这样的各种运算符拥挤到一起的代码在实际工作中非常不建议如此写