为什么按位异或在 JavaScript 的 if 语句中不起作用?
Why doesn't bitwise xor work in an if statement of JavaScript?
有人可以解释这种行为吗?
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 子句中或在其他地方时,按位的工作方式是否不同?我不经常使用按位,只是觉得这很优雅,跟进这里的答案:Check if two integers have the same sign
"Less Than"(<)的优先级高于按位异或(^):https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table
您需要用括号将运算分组。
按位运算符的优先级低于比较运算符。参见 Operator precedence。
话虽这么说,但不要编写聪明的代码。
function haveSameSign(a, b) {
return (a >= 0 && b >= 0) || (a < 0 && b < 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 子句中或在其他地方时,按位的工作方式是否不同?我不经常使用按位,只是觉得这很优雅,跟进这里的答案:Check if two integers have the same sign
"Less Than"(<)的优先级高于按位异或(^):https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table
您需要用括号将运算分组。
按位运算符的优先级低于比较运算符。参见 Operator precedence。
话虽这么说,但不要编写聪明的代码。
function haveSameSign(a, b) {
return (a >= 0 && b >= 0) || (a < 0 && b < 0);
}