13

2つの数字が同じ符号を持っているかどうかを確認する効率的な方法を探しています。

基本的に私はこれよりもエレガントな方法を探しています:

var n1 = 1;
var n2 = -1;

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

ビット演算子を使用したソリューションも問題ありません。

4

7 に答える 7

43

あなたはそれらを一緒に掛けることができます。それらが同じ符号を持っている場合、結果は正になります。

bool sameSign = (n1 * n2) > 0
于 2012-04-24T12:48:58.190 に答える
19

コードの文字数は少なくなりますが、オーバーフローする可能性があります。

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を正と見なす場合は、>を<に置き換える必要があります

于 2012-04-24T12:49:35.317 に答える
8

ビット単位のxorを使用する

n1^n2 >= 0 ? console.log("equal sign") : console.log("different sign");
于 2012-04-24T13:15:02.357 に答える
6

これは、特別な値に対して「同じ符号」を定義する方法に基づいています。

  • NaNNaN同じ記号がありますか?

あなたの答えが「いいえ」の場合、答えは次のとおりです。

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

あなたの答えが「はい」の場合、答えは次のとおりです。

Object.is(Math.sign(a) + 0, Math.sign(b) + 0)
于 2017-05-31T05:39:51.587 に答える
1
n = n1*n2;
if(n>0){ same sign }
else { different sign }
于 2012-04-24T12:50:07.187 に答える
1

シンプルで簡単:

bool sameSign = ((n1 < 0) == (n2 < 0)); 
于 2016-12-29T13:20:36.320 に答える
-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;
       }
于 2012-04-24T12:55:45.673 に答える