我尝试使用按位运算符建议to my question和here。
检查我的测试套件的结果:
function equal(n1,n2){
var bool = (n1^n2 >= 0)?true:false;
document.write("<div>"+bool+" ("+(n1^n2)+")</div>");
}
equal(-5,-2); //true
equal(-4,-20); //true
equal(15,-2); //false
equal(25,3); //true
equal(-1,1); //false
equal(1,1); //true
equal(-1,-1); //true
// edgecases
equal(0,0);
equal(-0,0);
equal(+0,0);
equal(-0,+0);
equal(+0,-0);
结果:
true (5)
true (16)
true (-15)
true (26)
true (-2)
false (0)
true (0)
true (0)
true (0)
true (0)
true (0)
true (0)
我根据fiddle is here。
结果让我非常困惑。我太傻了吗?这里发生了什么?
答案 0 :(得分:1)
你的括号在错误的地方:
function equal(n1, n2){
var bool = (n1 ^ n2) >= 0 ? true : false;
document.write("<div>" + bool + " (" + (n1^n2) + ")</div>");
}
这是一个updated fiddle,其结果与您的预期相符。
这在这种情况下很重要,因为所有按位运算符都比关系比较运算符lower precedence。另请注意,条件运算符(?:
)的优先级低于所有按位运算符,因此不需要在整个条件周围使用另一组括号。