首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C中逻辑运算符的优先级

问C中逻辑运算符的优先级
EN

Stack Overflow用户
提问于 2011-09-22 21:15:52
回答 5查看 8.7K关注 0票数 4

可能重复:

why “++x || ++y && ++z” calculate “++x” firstly ? however,Operator “&&” is higher than “||”

如果您查看C的优先级表,您将看到&&具有较高的优先级。

但是看看下面的代码:

代码语言:javascript
复制
a=b=c=1;

++a || ++b && ++c;

printf("%d %d %d\n",a,b,c);

它打印出“21 1",这意味着首先计算"++a”,一旦程序在那里看到一个真,它就会停在那里,因为在另一边的情况并不重要。

但是,既然&&具有较高的优先级,那么不应该先计算"++b && ++c“,然后再将结果插入到"++a维希”中吗?(在这种情况下,程序将打印“12 2")。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-09-22 21:23:31

试着用括号想象一下:

代码语言:javascript
复制
++a || ++b && ++c;

等于

代码语言:javascript
复制
(++a) || (++b && ++c);

它是从左到右计算的。

如果&&并具有相同的优先级,则如下所示

代码语言:javascript
复制
(++a || ++b) && (++c);
票数 13
EN

Stack Overflow用户

发布于 2011-09-22 21:20:30

优先规则只说明它将按以下方式进行评估:

代码语言:javascript
复制
++a || (++b && ++c);

现在出现了逻辑运算符的短路行为,它说,必须从左到右计算项,并在知道结果时停止。右边的部分永远不会被执行。

票数 6
EN

Stack Overflow用户

发布于 2011-09-22 21:48:17

评价的先后顺序是完全不同的两件事。对于逻辑运算符表达式,求值总是从左到右.表达式++a || ++b && ++c被解释为

  1. 评估++a
  2. ,如果1的结果为0,则评估++b && ++c

表达式被解析为++a || (++b && ++c);如果子表达式++a或++b && ++c之一为真,则整个表达式为true。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7521607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档