2つの数字が同じ符号を持っているかどうかを確認する効率的な方法を探しています。
基本的に私はこれよりもエレガントな方法を探しています:
var n1 = 1;
var n2 = -1;
( (n1 > 0 && n2 > 0) || (n1<0 && n2 < 0) )? console.log("equal sign"):console.log("different sign");
ビット演算子を使用したソリューションも問題ありません。
2つの数字が同じ符号を持っているかどうかを確認する効率的な方法を探しています。
基本的に私はこれよりもエレガントな方法を探しています:
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");
または整数オーバーフローなし、ただしわずかに大きい:
(n1>0) == (n2>0) ? console.log("equal sign") : console.log("different sign");
0を正と見なす場合は、>を<に置き換える必要があります
ビット単位のxorを使用する
n1^n2 >= 0 ? console.log("equal sign") : console.log("different sign");
これは、特別な値に対して「同じ符号」を定義する方法に基づいています。
NaN
、NaN
同じ記号がありますか?あなたの答えが「いいえ」の場合、答えは次のとおりです。
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 }
シンプルで簡単:
bool sameSign = ((n1 < 0) == (n2 < 0));
多分正規表現はトリックをするべきです
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;
}