0

有人可以解释这种行为吗?

https://jsfiddle.net/td1qtyxL/9/

function checkSignsWeird(a,b){
    var output = "";
    if(a^b < 0){
        output = "The "+a+" and "+b+" have DIFFERENT signs.";
    }else{
        output = "The "+a+" and "+b+" have the SAME sign.";
    }
    console.log(output);
}

基本上除非a^b存储在变量中(或括在括号中),否则它不起作用。

checkSignsWeird(-50,40);
checkSignsWeird(60,70);

两者都产生相同的结果。

艾米我做错了什么还是这是一个错误?当它在 if 子句中或在其他地方时,按位的工作方式是否不同?我不经常使用按位,只是认为这很优雅,从这里跟进答案:检查两个整数是否具有相同的符号

4

2 回答 2

2

“小于” (<) 的优先级高于按位 XOR (^):https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table

您需要使用括号对操作进行分组。

于 2017-04-26T12:38:23.340 回答
2

位运算符的优先级低于比较运算符。请参阅运算符优先级

话虽如此,不要编写聪明的代码。

function haveSameSign(a, b) {
    return (a >= 0 && b >= 0) || (a < 0 && b < 0);
}
于 2017-04-26T12:39:07.007 回答