首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逻辑运算符在if语句中相互影响吗?

逻辑运算符在if语句中相互影响吗?
EN

Stack Overflow用户
提问于 2019-08-21 13:33:56
回答 3查看 127关注 0票数 5

我有4条语句,如果语句1是真的,我只想检查语句2-4,下面是我试图实现的伪代码

代码语言:javascript
复制
if (statement 1) {
  if (statement 2 or statement 3 or statement 4){
    do something()
  }
}

我想知道下面的代码是否会做同样的事情

代码语言:javascript
复制
if(s1 && s2 || s3 || s4) {
  doSomething();
}

或者如果我不得不这样做

代码语言:javascript
复制
if (s1) {
  if (s2 || s3 || s4) {
     doSomething();
  }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-08-21 13:37:31

应付运算符优先

代码语言:javascript
复制
if(s1 && s2 || s3 || s4) 

是相同的

代码语言:javascript
复制
if((s1 && s2) || s3 || s4) 

因为&&||具有更高的优先级。你想要的是

代码语言:javascript
复制
if(s1 && (s2 || s3 || s4)) 

只有当s1为真,而s2s3s4中的任何一个为真时,这才是真。

您也是保证短路 on &&,只要这是内置操作符,这意味着如果s1为false,则不会计算s2s3s4。这也会发生在内置操作符中的||中,一旦遇到真表达式,其余的就不会被计算为true或任何东西都是true。

票数 8
EN

Stack Overflow用户

发布于 2019-08-21 13:38:35

在C++中,逻辑运算符&&||是短路的--这意味着运算符的左操作数将首先被计算,如果结果不会受到进一步计算的影响,那么它就会停止。例如,x() && y()只在x()为真时才计算y(),而x() || y()只在x()为false时才计算y()

作为一项建议,您应该注意在事物周围加上括号,以便更清楚地说明您想要的操作顺序:

代码语言:javascript
复制
s1 && (s2 || s3 || s4)

而不是

代码语言:javascript
复制
s1 && s2 || s3 || s4
票数 1
EN

Stack Overflow用户

发布于 2019-08-21 13:42:41

您需要在||语句中插入括号。所以:

代码语言:javascript
复制
if(s1 && (s2 || s3 || s4)) { // << note the parenthesis
  doSomething();
}

相等于

代码语言:javascript
复制
if (s1) {
  if (s2 || s3 || s4) {
     doSomething();
  }
}

这是因为短路评估的工作.基本上,如果s1为false,则不会对括号进行计算。你可以读到它,这里

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

https://stackoverflow.com/questions/57592907

复制
相关文章

相似问题

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