Heim >Backend-Entwicklung >C++ >Wie gehe ich mit negativen Modulo-Operationen richtig um?

Wie gehe ich mit negativen Modulo-Operationen richtig um?

Susan Sarandon
Susan SarandonOriginal
2025-01-13 13:22:43599Durchsuche

How Do I Handle Negative Modulo Operations Correctly?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn