0

我尝试了针对我的问题此处建议的按位运算符。

检查我的测试套件的结果:

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)

我的小提琴在这里

结果让我非常困惑。我是不是太傻了?这里发生了什么?

4

1 回答 1

1

你的括号放错了地方:

function equal(n1, n2){
    var bool = (n1 ^ n2) >= 0 ? true : false;
    document.write("<div>" + bool + " (" + (n1^n2) + ")</div>");
}

这是一个更新的小提琴,其结果符合您的期望。

这在这种情况下很重要,因为所有位运算符的优先级都低于关系比较运算符。另请注意,条件运算符 ( ?:) 的优先级低于所有按位运算符,因此不需要在整个条件周围使用另一组括号。

于 2012-04-24T15:07:49.713 回答