2

我知道按位运算符 &, | 和 ^是按位运算符或逻辑运算符...取决于操作数的类型。

如果操作数是整数,则运算符是按位的。如果它们是布尔值,则运算符是逻辑的。

那为什么会有逻辑运算符 &&,|| 和!? 我相信在某些情况下我们只能使用逻辑运算符,它们就是这样。

那么,任何人都可以解释这种情况吗?或任何优于按位运算的优势。

4

3 回答 3

7

运算符 && 和 || 懒洋洋地评价。这意味着只能评估一侧。

运算符 & 和 | 急切地评估,这意味着总是双方都被评估。

当您的表达式有副作用时,这一点非常重要。

例子

x = 0;
(x++ == 0) || (x++ == 1); // x is 1    

x = 0;
(x++ == 0) | (x++ == 1); // x is 2    
于 2013-08-17T11:51:19.333 回答
2

逻辑运算符 &&,|| 等让你short circuit逻辑。

1==1 || complexMethod(/*param*/)

complexMethod()不会执行。

1==1 | complexMethod(/*param*/)

complexMethod()执行。

短路基本上意味着条件将仅在必要的地方进行评估,而不是超出此范围

于 2013-08-17T11:51:58.700 回答
1

用于短路评估,如

前任:

&&

if(Condition1 && condition2){

}

||

 if(Condition1 || condition2){

}

在这些情况下

其中第二个参数仅在第一个参数不足以确定表达式的值时才被执行或评估:

于 2013-08-17T11:51:35.953 回答