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

Check if two integers have the same sign

本文关键字:符号 是否 整数 两个 检查      更新时间:2023-09-26

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

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

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

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

您可以将它们相乘;如果它们具有相同的符号,则结果将是正数。

bool sameSign = (n1 * n2) > 0

代码字符较少,但对于非常小的数字可能会下溢:

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

注意:正如正确@tsh提到的,中间结果为 Infinity-Infinity 的溢出确实有效。但是中间结果为 +0-0 的下溢将失败,因为+0不大于 0 .

或没有底溢,但稍大:

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

使用按位异或

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

这基于您如何为特殊值定义"相同符号":

  • NaNNaN有相同的标志吗?
如果您的答案是

"否",答案是:

Math.sign(a) === Math.sign(b)
如果您的答案是

"是",则答案是:

Object.is(Math.sign(a) + 0, Math.sign(b) + 0)
n = n1*n2;
if(n>0){ same sign }
else { different sign }

也许正则表达式应该可以解决问题

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;
       }