首先,您需要了解所涉及的运营商。
我们正在与五个运营商打交道。
&& 逻辑连接:如果它的两个操作数都为真,则结果。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 |
! 否定:在其操作数为假时产生一个值,在其操作数为真时产生一个值。truefalse
这可以由下面的真值表给出。
| 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