Modulo-Operator, der negative Zahlen in C/C/Obj-C verarbeitet
Der Modulo-Operator (%) in C-basierten Sprachen, Wenn es auf negative Zahlen angewendet wird, verhält es sich nicht immer intuitiv. Insbesondere kann das Ergebnis auch bei positiven Teilern negativ sein. Dieses Verhalten kann insbesondere für Mathematiker frustrierend sein.
Benutzerdefinierte Modulo-Funktion
Um dieses Problem zu beheben, kann eine benutzerdefinierte Modulo-Funktion implementiert werden, die negative Zahlen korrekt verarbeitet. Die folgende Funktion nutzt das durch die Implementierung definierte Verhalten des Modulo-Operators, um sicherzustellen, dass das Ergebnis immer positiv ist:
int mod(int a, int b) { if (b < 0) { return -mod(-a, -b); } int ret = a % b; if (ret < 0) { ret += b; } return ret; }
Diese Funktion prüft zunächst, ob der Divisor negativ ist. Wenn dies der Fall ist, ruft sich die Funktion rekursiv mit der Negation von Dividend und Divisor auf. Dadurch wird sichergestellt, dass das Ergebnis positiv ist.
Als nächstes berechnet die Funktion den Rest der Division mithilfe des Modulo-Operators. Wenn der Rest negativ ist, addiert die Funktion den Divisor zum Rest, um ihn positiv zu machen.
Schließlich gibt die Funktion das Ergebnis zurück.
Verwendung
Die Funktion mod() kann anstelle des Modulo-Operators verwendet werden, um das gewünschte Verhalten für negative Zahlen zu erhalten. Zum Beispiel:
int result = mod(-1, 8); // result is 7 result = mod(13, -8); // result is -3
Das obige ist der detaillierte Inhalt vonWie implementiert man eine benutzerdefinierte Modulo-Funktion für negative Zahlen in C/C/Obj-C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!