Welche der folgenden Techniken ist die beste Möglichkeit, eine ganze Zahl durch 2 zu teilen, und warum?
Technik 1:
x = x >> 1;
Technik 2:
x = x / 2;
Hier x
ist eine ganze Zahl.
Welche der folgenden Techniken ist die beste Möglichkeit, eine ganze Zahl durch 2 zu teilen, und warum?
Technik 1:
x = x >> 1;
Technik 2:
x = x / 2;
Hier x
ist eine ganze Zahl.
Ich würde sagen, es gibt mehrere Dinge zu beachten.
Bitshift sollte schneller sein, da keine besonderen Berechnungen erforderlich sind. zum Verschieben der Bits erforderlich ist, aber wie bereits erwähnt, gibt es mögliche Probleme mit negativen Zahlen. Wenn Sie sicher sind, dass Sie positive Zahlen haben und auf Geschwindigkeit Wert legen, würde ich bitshift.
T Wenn Sie also Wert auf die Lesbarkeit des Codes legen, können Sie diesen verwenden. Beachten Sie dass die Compiler-Optimierung einen langen Weg zurückgelegt hat, so dass es eine gute Praxis ist, den Code leicht Code leicht zu lesen und zu verstehen ist, ist eine gute Praxis.
D können die Operationen unterschiedlich schnell sein. Das Amdal'sche Gesetz soll den allgemeinen Fall schnell zu machen. Sie können also Hardware haben, die verschiedene Operationen schneller ausführen kann als andere. Zum Beispiel kann die Multiplikation mit 0,5 schneller sein als die Division durch 2. (Zugegeben, Sie müssen möglicherweise die Untergrenze der Multiplikation nehmen, wenn Sie eine ganzzahlige Division erzwingen wollen).
Wenn es Ihnen um reine Leistung geht, würde ich empfehlen, einige Tests zu erstellen, die die Vorgänge millionenfach ausführen können. Führen Sie mehrere Stichproben durch (Ihre Stichprobengröße), um festzustellen, welche Ausführung mit Ihrem Betriebssystem/Hardware/Compiler/Code statistisch gesehen die beste ist.
Was die CPU betrifft, so sind Bit-Shift-Operationen schneller als Divisionsoperationen. Der Compiler weiß dies jedoch und wird im Rahmen seiner Möglichkeiten entsprechend optimieren, Sie können also so programmieren, wie es am sinnvollsten ist, und sich darauf verlassen, dass Ihr Code effizient läuft. Aber denken Sie daran, dass eine unsigned int
kann (in einigen Fällen) besser optimiert werden als eine int
aus den bereits erwähnten Gründen. Wenn Sie keine vorzeichenbehaftete Arithmetik benötigen, dann lassen Sie das Vorzeichenbit weg.
Ich erzähle das zum Zwecke der Programmierung von Wettbewerben. Im Allgemeinen haben sie sehr große Eingänge, bei denen die Division durch 2 viele Male stattfindet, und es ist bekannt, dass der Eingang positiv oder negativ ist.
x>>1 wird besser sein als x/2. Ich habe auf ideone.com ein Programm ausgeführt, bei dem mehr als 10^10 Operationen zur Division durch 2 stattfanden. x/2 benötigte fast 5,5s, während x>>1 fast 2,6s für dasselbe Programm benötigte.
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.