Viele Programmiersprachen haben einen "Rest" -Operator, der als Moduloperator verwendet werden kann, wenn beide Operanden positiv sind. Dieser Operator wird oft als "Modul" -Operator bezeichnet, da dies seine Hauptverwendung ist. Sprachen haben im Allgemeinen einen solchen Operator, weil die Divisionshardware vieler Hardwareplattformen beim Durchführen einer Division automatisch einen Rest liefert und das Berechnen eines Restes oder Moduls über andere Mittel viel schwieriger wäre.
Ich kenne die Geschichte der Hardwareunterstützung für signierte Divisionen nicht. Viele Prozessoren haben jahrelang Hardware bereitgestellt, die automatisch eine vorzeichenbehaftete Division durchführen kann, unter der Bedingung, dass -a / b oder a / b (-q, -r) ergeben, wenn a / b (q, r) ergibt, aber Ich bin mir nicht sicher, in welchen Anwendungsfällen die Aufteilung nach dieser Regel besonders hilfreich ist. In fast allen Fällen, in denen ich Integer-Division oder "Modul" -Operationen für negative Werte verwendet habe, wollte ich eine Unendlich-Rundung für die Division und eine echte Modul-Operation (so dass (a + b) / b) immer gleich (a / b) +1 und (a + b)% b wäre immer gleich a% b.) Da die Operatoren nicht so arbeiten, ist es notwendig, das Vorzeichen der Dividende zu testen und einen anderen Code zu verwenden, wenn es " s negativ - annulliert im Wesentlichen jeden Vorteil, der daraus resultiert, dass eine Divisionsanweisung unterzeichnet ist. Ich bin gespannt, zu welchen Zwecken die Unterstützung von Signed-Division in der Hardware tatsächlich sinnvoll ist.
Zurück zur ursprünglichen Frage: Der Modulusoperator ist häufig in Situationen nützlich, in denen bestimmte Dinge periodisch geschehen sollen, entweder räumlich (z. B. grafische Koordinaten) oder zeitlich. Wenn ein Ereignis beispielsweise alle 15 Sekunden stattfinden soll, beträgt die Zeit bis zum nächsten Ereignis 15 - ((time_now - time_of_an_occurrence)% 15), vorausgesetzttime_of_an_occurrence
time_now
, sie ist nicht größer als . Wenn time_of_an_occurrence
größer als wäre time_now
, könnte ein Moduloperator weiterhin dieselbe Formel verwenden, vorausgesetzt, die Subtraktion läuft nicht über, aber der Restoperator benötigt eine andere Formel.