Wie würde ich feststellen, ob eine bestimmte Zahl gerade oder ungerade ist? Ich wollte das schon lange herausfinden und bin nirgendwo hingekommen.
128
Sie können den Moduloperator verwenden, dies kann jedoch langsam sein. Wenn es sich um eine Ganzzahl handelt, können Sie Folgendes tun:
if ( (x & 1) == 0 ) { even... } else { odd... }
Dies liegt daran, dass das niedrige Bit immer auf eine ungerade Zahl gesetzt wird.
n % 2 == 0
bedeutet semantischDivide by 2 and check if the remainder is 0
, was viel klarer ist alsn & 1 == 0
was bedeutetZero all the bits but leave the least significant bit unchanged and check if the result is 0
. Die verbesserte Klarheit des ersten ist den (wahrscheinlich nicht vorhandenen) Aufwand wert. Das habe ich mit vorzeitiger Optimierung gemeint. Wenn etwas langsam ist und Sie es in diesem Teil profilierenn % 2
,n & 1
ist es sicherlich gerechtfertigt, es zu ändern , aber es vorher nicht zu tun. Im Allgemeinen ist es eine schlechte Idee, vor dem Profiling mit den Bitoperatoren zu arbeiten.n % 2 == 0
die sauberer ist alsn & 1 == 0
.quelle
Wenn der Rest, wenn Sie durch 2 teilen, 0 ist, ist es gerade.
%
ist der Betreiber, um einen Rest zu erhalten.quelle
(A % B)
selbst kann als Ausdruck verwendet werden, und dann wird es lustig.Der Restoperator% gibt Ihnen den Rest nach dem Teilen durch eine Zahl.
Also
n % 2 == 0
wird wahr sein, wenn n gerade ist und falsch, wenn n ungerade ist.quelle
Jede gerade Zahl ist durch zwei teilbar, unabhängig davon, ob es sich um eine Dezimalzahl handelt (aber die Dezimalstelle muss, falls vorhanden, auch gerade sein). Sie können also den
%
Operator (Modulo) verwenden, der die Zahl links durch die Zahl rechts teilt und den Rest zurückgibt ...quelle
ich würde empfehlen
Es gibt eine kurze Erklärung, wie Sie überprüfen können, ob die Zahl ungerade ist. Der erste Versuch ist ähnlich wie bei @AseemYadav:
aber wie im Buch erwähnt wurde:
Also im Allgemeinen, wenn wir eine negative ungerade Zahl haben, dann statt
1
wir bekommen-1
als Ergebnisi%2
. Wir können also die @ Camilo-Lösung verwenden oder einfach Folgendes tun:Aber im Allgemeinen ist die schnellste Lösung die Verwendung eines AND-Operators wie @lucasmo. Schreiben Sie oben:
@Edit Es lohnt sich auch darauf hinzuweisen,
Math.floorMod(int x, int y);
welche gut mit der negativen Dividende umgehen, aber auch zurückkehren können,-1
wenn der Divisor negativ istquelle
Funktioniert für positive oder negative Zahlen
quelle
Das niedrigstwertige Bit (ganz rechts) kann verwendet werden, um zu überprüfen, ob die Zahl gerade oder ungerade ist. Für alle ungeraden Zahlen ist das Bit ganz rechts in der Binärdarstellung immer 1.
quelle
Dieses folgende Programm kann große Zahlen verarbeiten (Anzahl der Stellen größer als 20).
Hier ist die Ausgabe ::
quelle
Sie können den Moduloperator verwenden, dies kann jedoch langsam sein. Ein effizienterer Weg wäre, das niedrigste Bit zu überprüfen, da dies bestimmt, ob eine Zahl gerade oder ungerade ist. Der Code würde ungefähr so aussehen:
quelle
Sie können dies tun:
Dies liegt daran, dass Java in seiner Modulo-Operation das Vorzeichen der Dividende auf der linken Seite hat: n. Für negative und positive Dividenden hat das Modulo das Vorzeichen von ihnen.
Natürlich ist die bitweise Operation schneller und optimiert. Dokumentieren Sie einfach die Codezeile mit zwei oder drei kurzen Wörtern, um die Lesbarkeit zu verbessern.
quelle
Ein weiterer einfacher Weg, dies ohne die if / else-Bedingung zu tun (funktioniert sowohl für positive als auch für negative Zahlen):
Für eine ungerade Nr. Gibt der Ausdruck als Rest '1' zurück und gibt
Andernfalls wird 'gerade' gedruckt, wenn der Ausdruck das Ergebnis '0' ergibt.
quelle
int n = -3;
. Wie @Camilo unten erwähnt - wenn die verbleibende Operation ein Ergebnis ungleich Null zurückgibt, hat sie das gleiche Vorzeichen wie ihr linker Operand, so allgemein, dass wir das haben,System.out.println(messages.get(-1));
was uns gibtjava.lang.ArrayIndexOutOfBoundsException
Wenn der Modul der gegebenen Zahl gleich Null ist, ist die Zahl gerade oder eine ungerade Zahl. Unten ist die Methode, die das macht:
quelle
quelle
Hier ist ein Beispiel, um festzustellen, ob eine bestimmte Zahl gerade oder ungerade ist.
Nun, es gibt viele Möglichkeiten, dasselbe zu bestimmen. In dieser Ressource finden Sie weitere Beispiele, um festzustellen, ob die angegebene Zahl gerade oder ungerade ist.
quelle
Hier ist ein vollständiges Beispiel: -
quelle