Heim >Backend-Entwicklung >C++ >Wie gehe ich mit negativen Modulo-Operationen richtig um?
Die Herausforderungen des negativen Modulo meistern
Der Modulo-Operator (%) kann beim Umgang mit negativen Zahlen schwierig sein. Während es den Rest für positive ganze Zahlen reibungslos zurückgibt, führt sein Verhalten bei negativen Zahlen oft zu Verwirrung. Dieser Operator liefert den Rest nach der Division.
Das Problem mit negativem Modulo
Betrachten Sie ein Array mit einer Länge von 3:
<code>i % 3 = 4 -> 1 3 -> 0 2 -> 2 1 -> 1 0 -> 0 -1 -> -1 -2 -> -2 -3 -> 0 -4 -> -1</code>
Beachten Sie, dass negative Reste negativ bleiben, im Gegensatz zu ihren positiven Gegenstücken, die den positiven Bereich durchlaufen.
Eine Lösung für negatives Modulo
Um sicherzustellen, dass sich negative Zahlen wie erwartet verhalten (Umbruch), ist eine benutzerdefinierte Funktion erforderlich:
<code class="language-c++">int GetArrayIndex(int i, int arrayLength) { int r = i % arrayLength; return (r < 0) ? (r + arrayLength) : r; }</code>
Wie es funktioniert
Diese Funktion fügt geschickt arrayLength
zum Rest (r
) hinzu, nur wenn r
negativ ist. Dadurch wird der negative Rest in den positiven Bereich „umhüllt“ und das gewünschte Modulo-Verhalten nachgeahmt.
Praktische Anwendung
Testen wir die Funktion mit unserem 3-Elemente-Array:
GetArrayIndex( 4, 3) -> 1 GetArrayIndex( 3, 3) -> 0 GetArrayIndex( 2, 3) -> 2 GetArrayIndex( 1, 3) -> 1 GetArrayIndex( 0, 3) -> 0 GetArrayIndex(-1, 3) -> 2 GetArrayIndex(-2, 3) -> 1 GetArrayIndex(-3, 3) -> 0 GetArrayIndex(-4, 3) -> 2
Diese benutzerdefinierte Funktion verarbeitet negative Modulo-Operationen effektiv und liefert konsistente und vorhersehbare Ergebnisse. Jetzt können Sie sicher mit negativem Modulo arbeiten, ohne auf unerwartetes Verhalten zu stoßen.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit negativen Modulo-Operationen richtig um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!