检查两个整数是否具有相同的符号

时间:2012-04-24 12:46:38

标签: javascript

我正在寻找一种有效的方法来检查两个数字是否具有相同的符号。

基本上我正在寻找比这更优雅的方式:

var n1 = 1;
var n2 = -1;

( (n1 > 0 && n2 > 0) || (n1<0 && n2 < 0) )? console.log("equal sign"):console.log("different sign");

使用按位运算符的解决方案也可以。

7 个答案:

答案 0 :(得分:38)

你可以将它们相乘;如果他们有相同的标志,结果将是积极的。

bool sameSign = (n1 * n2) > 0

答案 1 :(得分:15)

代码字符较少,但可能会溢出:

n1*n2 > 0 ? console.log("equal sign") : console.log("different sign or zero");

或没有整数溢出,但略大:

(n1>0) == (n2>0) ? console.log("equal sign") : console.log("different sign");

如果你认为0为正,那么&gt;应该用&lt;

替换

答案 2 :(得分:6)

使用按位xor

n1^n2 >= 0 ? console.log("equal sign") : console.log("different sign");

答案 3 :(得分:4)

这取决于您如何为特殊值定义“相同符号”:

  • NaNNaN有相同的标志吗?

如果您的答案为“否”,答案是:

Math.sign(a) === Math.sign(b)

如果您的答案为“是”,答案是:

Object.is(Math.sign(a) + 0, Math.sign(b) + 0)

答案 4 :(得分:1)

n = n1*n2;
if(n>0){ same sign }
else { different sign }

答案 5 :(得分:-1)

简单易行:

private void checkTheCheckInterval(Func<in SqlConnection, in Random, in TextBox, out Boolean> myFunc) {

}

答案 6 :(得分:-4)

也许正则表达式可以做到这一点

function isNegative(num) { 
        if (num.match(/^-\d+$/)) {
            return true;
        } else {
            return false;
        }
   }


function isSameSign(num1, num2) { 
        var sameSign = false;  
        if (num1.match(/^-\d+$/) && num2.match(/^-\d+$/) ) {
                sameSign = true;
            } else if(!num2.match(/^-\d+$/) && !num2.match(/^-\d+$/)) {
                sameSign =true;
            }
        return sameSign;
       }