&& 和 | 的使用表达式中的运算符一起

Posted

技术标签:

【中文标题】&& 和 | 的使用表达式中的运算符一起【英文标题】:use of && and | operators together in a expression 【发布时间】:2012-11-29 10:24:08 【问题描述】:

cond && cond op cond

op 可以是&&||

Qn- 对于短路 (&&) 运算符,如果第一个条件为假,则不评估右侧部分(整体)或不评估 && 之后的第二个条件

还有为什么下面两个表达式的结果不同?

(2 > 3 && 5 < 2 || 3 > 2) => True

(2 > 3 && 5 < 2 | 3 > 2) => False

我们不能在一个表达式中使用短路运算符和标准运算符吗...?

【问题讨论】:

【参考方案1】:

您的结果不同,因为您的第二种情况使用 |而不是||。 |是按位或,与逻辑或不同。

现在您说的是短路表达式与标准表达式,但在许多语言中,短路表达式是评估逻辑表达式的默认(或唯一方式)。

如果您所说的“标准”指的是按位运算符,例如 & 或 |,那么您可以将它们与逻辑运算符混合并匹配,尽管结果可能不是您所期望的。

【讨论】:

我同意 |是位运算符,但它也可以用作非短路..我错了吗? 好的...我建议不要使用“标准”,因为如果有的话,短路的就是标准的。还有,别想|作为非短路。它的作用与 || 不同。【参考方案2】:

结果不同,因为||| have different precedence。

具体来说,| 的优先级高于&&,而|| 的优先级低于&&

          System.out.println(2 > 3 && 5 < 2 || 3 > 2);    // true
          System.out.println(2 > 3 && 5 < 2 | 3 > 2);     // false
          System.out.println(2 > 3 && (5 < 2 | 3 > 2));   // false
          System.out.println((2 > 3 && 5 < 2) | (3 > 2)); // true

【讨论】:

谢谢..使用有问题吗 |还是 & 作为逻辑运算符? 我不知道,但是你必须小心,因为一旦你进入不同的优先级,你必须确保你知道什么是最先出现的以及服务器将如何读取它。 @PRAKHARSHARMA 我建议不要使用 |&amp; 作为逻辑运算符,因为 1)它们不会短路,因此代码会被不必要地执行,并且 2)大多数人不会'不要那样使用它们,所以你的代码将是非常规的。 我刚刚问了类似的问题,我得到了不错的答案:***.com/questions/15089890/… 简而言之,大多数人都同意使用 |和 & 强制执行业务逻辑可能会导致错误和不干净的代码。所以不鼓励,在极少数情况下还有用处。

以上是关于&& 和 | 的使用表达式中的运算符一起的主要内容,如果未能解决你的问题,请参考以下文章

javaScript 中的布尔运算符 && 和 ||

JS 中的布尔运算符 && 和 ||

程序中的算术运算和逻辑运算表达式

是否有与 Java 正则表达式中的交集 (&&) 运算符等效的 JavaScript 正则表达式?

C语言里且和或是啥符号

Java中的逻辑运算符短路效应