异或:这两个是等价的吗?

时间:2011-09-17 05:46:57

标签: javascript

我在underscore.js源代码中看到了这段代码:

if ((!a && b) || (a && !b)) return false;

这相当于以下几点吗?

if (a ^ b) return false;

2 个答案:

答案 0 :(得分:6)

严格来说,没有。 &&||是逻辑运算符,而^是逐位运算符。

但是如果你的输入是布尔值(或者集合{0,1}中的整数),那么语义将基本相同。如果您不能保证这些输入,您仍然可以确保相同的语义:

if (!a ^ !b) return false;

(当然,假设ab是纯变量,而不是带有副作用的复杂表达式。)

答案 1 :(得分:0)

这两个不一样,因为a ^ b是一个按位xor函数而不是逻辑xor函数。因此,如果a = 1b = 2,那么a ^ b=3,但您需要一个假值,因为ab都是真实的。