黑马程序员技术交流社区

标题: c语言 逻辑与 逻辑或短路问题,求大神详细解释下 [打印本页]

作者: jy00889669    时间: 2015-10-9 14:51
标题: c语言 逻辑与 逻辑或短路问题,求大神详细解释下
&&的优先级不是比||高吗?执行这一句时 ++a||++b&&++c;不应该先执行(++b&&++c)吗?自己在编写的时候感觉是++a||(++b&&++c;)这样运行的,++a成立后不执行后续语句。但是&&优先级高于||,求大神解释。
#include <stdio.h>
int main(int argc, char *argv[]) {
   int a=1,b=2,c=3;
  ++a||++b&&++c;
printf("%d %d %d",a,b,c); return 0;
}
作者: gaozp    时间: 2015-10-10 09:57
我也是初学者,就想讨论一下
是不是因为++a是判断条件,所以要先执行或运算?
作者: 布鲁兹老爷    时间: 2015-10-10 11:03
逻辑运算符执行顺序从左往右


这里++a后面是 ||,因为++a为真,所以后面的就都不执行了,如果++a为假,那么就会运算(++b && ++c)

如果是 ++a || ++b || ++c 是这样,++a为假的话,就会判断++b是否为真。

所以上面&& 与 || 的优先级问题应该是判断的时候的优先级,而不是执行的顺序。

我个人是这么理解的。
作者: jy00889669    时间: 2015-10-10 13:54
布鲁兹老爷 发表于 2015-10-10 11:03
这里++a后面是 ||,因为++a为真,所以后面的就都不执行了,如果++a为假,那么就会运算(++b && ++c)

...

感谢你的分析,似乎明白了
作者: jy00889669    时间: 2015-10-10 13:55
gaozp 发表于 2015-10-10 09:57
我也是初学者,就想讨论一下
是不是因为++a是判断条件,所以要先执行或运算? ...

貌似就是这个道理,先判断++a的值是否为真
作者: gaozp    时间: 2015-10-10 17:23
a的值代表的本身就为真所以不执行后边的语句吧
作者: wwf707542865    时间: 2015-10-11 01:24
学到了学到了
作者: jy00889669    时间: 2015-10-11 01:54
wwf707542865 发表于 2015-10-11 01:24
学到了学到了

共同学习,共同进步才是好
作者: chensc    时间: 2015-10-11 07:22
学习学习!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2