20 Stimmen

Prüfen, ob zwei ganze Zahlen das gleiche Vorzeichen haben

Ich bin auf der Suche nach einer effizienten Methode, um zu prüfen, ob zwei Zahlen das gleiche Vorzeichen haben.

Im Grunde suche ich nach einem eleganteren Weg als diesem:

var n1 = 1;
var n2 = -1;

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

Eine Lösung mit bitweisen Operatoren wäre auch in Ordnung.

56voto

Jason Hall Punkte 20201

Du kannst sie miteinander multiplizieren; wenn sie das gleiche Vorzeichen haben, ist das Ergebnis positiv.

bool sameSign = (n1 * n2) > 0

22voto

user1346466 Punkte 610

Weniger Code-Zeichen, aber möglicherweise Unterlauf bei sehr kleinen Zahlen:

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

Hinweis: Wie @tsh richtig erwähnt hat, kann ein Überlauf mit einem Zwischenergebnis von Infinity o -Infinity funktioniert. Aber ein Unterlauf mit einem Zwischenergebnis von +0 o -0 wird scheitern, weil +0 nicht größer ist als 0 .

oder ohne Unterlauf, aber etwas größer:

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

11voto

william Punkte 233

Bitweises xor verwenden

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

6voto

tsh Punkte 3669

Das hängt davon ab, wie Sie "gleiches Vorzeichen" für besondere Werte definieren:

  • tut NaN , NaN das gleiche Zeichen haben?

Wenn Ihre Antwort "Nein" lautet, lautet die Antwort:

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

Wenn Ihre Antwort "Ja" lautet, lautet die Antwort:

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

1voto

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X