首先,您需要了解所涉及的运营商。
我们正在与五个运营商打交道。
&&
逻辑连接:如果它的两个操作数都为真,则结果。true
这可以由下面的真值表给出。
| A | B | A && B |
+-------+-------+--------+
| true | true | true |
+-------+-------+--------+
| true | false | false |
+-------+-------+--------+
| false | true | false |
+-------+-------+--------+
| false | false | false |
||
逻辑析取:只要一个或多个操作数为真,就会产生结果。true
这可以由下面的真值表给出。
| A | B | A || B |
+-------+-------+--------+
| true | true | true |
+-------+-------+--------+
| true | false | true |
+-------+-------+--------+
| false | true | true |
+-------+-------+--------+
| false | false | false |
!
否定:在其操作数为假时产生一个值,在其操作数为真时产生一个值。true
false
这可以由下面的真值表给出。
| A | !A |
+-------+-------+
| true | false |
+-------+-------+
| false | true |
==
等于:对于这个问题,它比较两个数字,true
如果两个数字相同则返回。
!=
不等于:它是 的简写!(A == B)
,即true
如果数字不相同则返回。
请注意,两者都&&
受益||
于Short-circuit Evaluation(也称为Shortcut Evaluation)。这意味着只有在必要时才会评估第二个操作数(右侧操作数)。
连词 ,&&
要求两个操作数都为真。它从评估第一个操作数开始。如果第一个操作数的计算结果为false
,则整个连词为假,并且计算第二个操作数没有意义。
析取||
需要一个操作数为真。它从评估第一个操作数开始。如果第一个操作数的计算结果为true
,则整个析取为真,并且计算第二个操作数没有意义。
另请注意,其余三个操作数的优先级高于&&
和||
。例如,b && x == 0
与 完全相同b && (x == 0)
。但是,评估顺序仍然存在。
加起来:
a) b && x == 0 // false: b is false, short-circuit applies
b) b || x == 0 // true: b is false, x == 0 is evaluated to true
c) !b && x == 0 // true: !b is true, and x == 0 is also true
d) !b || x == 0 // true: !b is true, short-circuit applies
e) b && x != 0 // false: b is false, short-circuit applies
f) b || x != 0 // false: b is false, x != 0 is also false
g) !b && x != 0 // false: !b is true, however x != 0 is false
h) !b || x != 0 // true: !b is true, short-circuit applies