Bei der Programmierung muss oft geprüft werden, ob eine Zahl gerade oder ungerade ist. Dafür verwenden wir in der Regel:Transformieren die meisten Compiler% 2 in einen Bitvergleich? Ist es wirklich schneller?
n % 2 == 0
aber mein Verständnis ist, dass der '%'
Operator führt tatsächlich eine Division und gibt seinen Rest; Daher wäre es für den obigen Fall schneller, einfach das letzte Bit zu überprüfen. Lassen Sie uns sagen n = 5;
5 = 00000101
Um zu überprüfen, ob die Zahl gerade oder ungerade ist, brauchen wir nur das letzte Stück zu überprüfen. Wenn es 1
ist, ist die Nummer ungerade; ansonsten ist es eben.
n & 1 == 0
In meinem Verständnis wäre dies schneller als % 2
wie keine Trennung durchgeführt wird: in der Programmierung, würde es so ausdrücken. Ein einfacher Bitvergleich ist erforderlich.
Ich habe 2 Fragen dann:
1) schneller Der zweite Weg ist wirklich als die erste (in allen Fällen)?
2) Wenn die Antwort für 1 ja ist, sind Compiler (in allen Sprachen) intelligent genug, % 2
in einen einfachen Bit-Vergleich zu konvertieren? Oder müssen wir den zweiten Weg explizit nutzen, wenn wir die beste Leistung wollen?
Das ist grundlegende Optimierung, jeder Compiler wird das optimieren. – Banex
Sie müssen nur auf * einen * Compiler überprüfen - den, den Sie verwenden. Haben Sie schon einmal überprüft, ob 'x * 9' in' lea x, [8 * x + x] 'übersetzt wird? – usr2564301
BTW, ich denke du meinst '(n & 1) == 0' dort – harold