Ich verstehe den Moduloperator anhand des folgenden Ausdrucks:
7 % 5
Dies würde 2 zurückgeben, da 5 einmal in 7 geht und dann die 2 ergibt, die übrig bleibt. Meine Verwirrung kommt jedoch, wenn Sie diese Aussage umkehren, um zu lesen:
5 % 7
Dies gibt mir den Wert 5, was mich leicht verwirrt. Obwohl die Gesamtheit von 7 nicht in 5 geht, gibt es einen Teil davon. Warum gibt es entweder keinen Rest oder einen Rest von positiven oder negativen 2?
Wenn der Wert von 5 auf der Grundlage der Tatsache berechnet wird, dass 7 überhaupt nicht in 5 übergeht, warum ist der Rest dann nicht 7 statt 5?
Ich habe das Gefühl, dass mir hier etwas fehlt, um den Moduloperator zu verstehen.
1 % 500
zurückkam,1
aber wenn Sie die lange Division von Hand machen, würde ich ohne Rest vollständig in 500 gehen (aber es wäre ein Dezimalergebnis). Nachdem ich die Antworten gelesen habe, habe ich festgestellt, dass%
dies nicht in Dezimalstellen geht, sodass für 1% 500 die gesamte Zahl als Rest zurückgegeben wird. Welches ist wahr, wenn Sie darüber nachdenken.%
ist ein multiplikativer Operator , der den Rest einer Division zurückgibt. Er entspricht nicht den Regeln für die Modulo- Operation. Siehe diese Antwort .Antworten:
(Diese Erklärung gilt nur für positive Zahlen, da sie ansonsten von der Sprache abhängt.)
Definition
Der Modul ist der Rest der euklidischen Division einer Zahl durch eine andere.
%
wird die Modulo-Operation genannt .Zum Beispiel
9
durch4
gleich geteilt,2
aber es bleibt1
. Hier9 / 4 = 2
und9 % 4 = 1
.In Ihrem Beispiel: 5 geteilt durch 7 ergibt 0, aber es bleibt 5 (
5 % 7 == 5
).Berechnung
Die Modulo-Operation kann unter Verwendung dieser Gleichung berechnet werden:
floor(a / b)
die Anzahl der Male stellt man teilen kanna
durchb
floor(a / b) * b
ist der Betrag, der erfolgreich vollständig geteilt wurdea
) abzüglich der geteilten Beträge entspricht dem Rest der DivisionAuf das letzte Beispiel angewendet ergibt dies:
Modulararithmetik
Das heißt, Ihre Intuition war, dass es -2 und nicht 5 sein könnte. Eigentlich in modularer Arithmetik,
-2 = 5 (mod 7)
weil es k in Z so existiert, dass7k - 2 = 5
.Sie haben vielleicht keine modulare Arithmetik gelernt, aber Sie haben wahrscheinlich Winkel verwendet und wissen, dass -90 ° dasselbe ist wie 270 °, weil es Modulo 360 ist. Es ist ähnlich, es wird umbrochen! Nehmen Sie also einen Kreis und sagen Sie, dass der Umfang 7 ist. Dann lesen Sie, wo 5 ist. Und wenn Sie es mit 10 versuchen, sollte es bei 3 sein, weil
10 % 7
3 ist.quelle
%
nicht die Modulo-Operation aus, sondern führt einen einfachen Rest aus und sollte daher als Restoperator bezeichnet werden .Lösung in zwei Schritten.
Einige der Antworten hier sind für mich kompliziert zu verstehen. Ich werde versuchen, eine weitere Antwort hinzuzufügen, um die Sichtweise zu vereinfachen.
Kurze Antwort:
Beispiel 1:
Teilen Sie 7 Scheiben auf 5 Personen und jede der
5
Personen erhält eine Pizzastück und wir erhalten am Ende2
Scheiben (verbleibende).7 % 5
gleich2
ist, weil7
größer als ist5
.Beispiel 2:
Es gibt,
5
weil5
ist weniger als7
. Per Definition können Sie also nicht ganze5
Elemente auf7
Personen aufteilen . Die Teilung findet also überhaupt nicht statt und Sie erhalten den gleichen Betrag, mit dem Sie begonnen haben5
.Programmatische Antwort:
Der Prozess besteht im Wesentlichen darin, zwei Fragen zu stellen:
Beispiel A: (7% 5)
(Q.1) Welche Zahl muss mit 5 multipliziert werden, um 7 zu erhalten?
Lass es uns versuchen:
Der Multiplikator ist also Null
0
.0 x 5 = 0
Trotzdem sind wir kurz und addieren eins (+1) zum Multiplikator.
1
damit,1 x 5 = 5
Wir haben noch keine 7 bekommen, also fügen wir eine hinzu (+1).
2
damit,2 x 5 = 10
Jetzt haben wir übertroffen
7
. Ist2
also nicht der richtige Multiplikator. Gehen wir einen Schritt zurück (wo wir verwendet haben1
) und denken Sie an das Ergebnis, das ist5
. Zahl5
ist hier der Schlüssel.(Q.2) Wie viel müssen wir zu der
5
(der Zahl, die wir gerade aus Schritt 1 erhalten haben) hinzufügen , um zu erhalten7
?Wir ziehen die beiden Zahlen ab :
7-5 = 2
.Die Antwort für:
7 % 5
ist2
;Beispiel B: (5% 7)
1- Mit welcher Zahl multiplizieren wir 7, um 5 zu erhalten?
Lass es uns versuchen:
0
damit,0 x 7 = 0
Wir haben noch keine 5 bekommen, versuchen wir es mit einer höheren Zahl.
1
damit,1 x 7 = 7
Oh nein, wir haben übertroffen
5
, kehren wir zum vorherigen Schritt zurück, in dem wir0
das Ergebnis verwendet haben0
.2- Wie viel müssen wir hinzufügen
0
(die Zahl, die wir gerade aus Schritt 1 erhalten haben), um den Wert der Zahl auf der linken Seite zu erreichen5
?Es ist klar, dass die Zahl 5 ist.
5-0 = 5
Hoffentlich hilft das.
quelle
Wie andere betont haben, basiert der Modul auf dem Restsystem.
Ich denke, eine einfachere Möglichkeit, über den Modul nachzudenken, besteht darin, was bleibt, nachdem eine Dividende (zu teilende Zahl) vollständig durch einen Divisor geteilt wurde. Wenn wir also an 5% 7 denken, wenn Sie 5 durch 7 teilen, kann 7 nur 0 Mal in 5 gehen und wenn Sie 0 (7 * 0) von 5 subtrahieren (genau wie wir es in der Grundschule gelernt haben), dann der Rest wäre 5 (der Mod). Siehe die Abbildung unten.
Mit der gleichen Logik ist -5 mod 7 -5 (nur 0 7s können in -5 und -5-0 * 7 = -5 gehen). Mit dem gleichen Token wird -5 mod -7 auch -5 sein. Einige weitere interessante Fälle:
5 mod (-3) = 2 dh 5 - (-3 * -1)
(-5) mod (-3) = -2 dh -5 - (-3 * 1) = -5 + 3
quelle
Es geht nur um die Reste. Lass mich dir zeigen wie
Jetzt sollten wir uns an eine Sache erinnern, Mod bedeutet Rest so
aber warum 4? weil 5 X 0 = 0 ist, ist 0 das nächste Vielfache, das kleiner als 4 ist, daher 4-0 = 4
quelle
Modul ist Restsystem.
Also 7% 5 = 2.
5% 7 = 5
3% 7 = 3
2% 7 = 2
1% 7 = 1
Bei Verwendung innerhalb einer Funktion zur Bestimmung des Array-Index. Ist es sicher zu programmieren? Das ist eine andere Frage. Ich vermute.
quelle
Schritt 1: 5/7 = 0,71
Schritt 2: Nehmen Sie die linke Seite der Dezimalstelle, also nehmen wir 0 von 0,71 und multiplizieren mit 7 0 * 7 = 0;
Schritt #: 5-0 = 5; Daher ist 5% 7 = 5
quelle
Der Moduloperator gibt Ihnen das Ergebnis in einem System mit reduzierten Rückständen. Zum Beispiel werden für Mod 5 5 ganze Zahlen gezählt: 0,1,2,3,4. Tatsächlich ist 19 = 12 = 5 = -2 = -9 (Mod 7) . Der Hauptunterschied, dass die Antwort durch Programmiersprachen durch "System mit reduzierten Rückständen" gegeben wird.
quelle
Sagen wir es so:
Eigentlich macht der Modulus-Operator die gleiche Unterteilung, aber die Antwort ist ihm egal, er kümmert sich um die Erinnerung, zum Beispiel, wenn Sie 7 bis 5 teilen. Lassen Sie
mich Sie durch ein einfaches Beispiel führen:
Denken Sie 5 ist ein Block, dann werden wir zum Beispiel 3 Blöcke in 15 haben ( WITH Nothing Left ), aber wenn dieser Loginc zu diesen Zahlen {1,3,5,7,9,11, ...} kommt, ist hier Wo der Modul herauskommt, nimm also die Logik, die ich vorher gesagt habe, und wende sie für 7 an. Die Antwort wird also sein, dass wir 1 Block von 5 in 7 haben => mit 2 Erinnerungen in unserer Hand! das ist der modul !!!
aber du hast nach 5% 7 gefragt, oder?
Also nimm die Logik, die ich gesagt habe, wie viele 7 Blöcke haben wir in 5 ???? 0
Der Modul gibt also 0 zurück ...
das war's ...
quelle
Ein neuartiger Weg, um den Rest herauszufinden, ist unten angegeben
Aussage: Der Rest ist immer konstant
Dies kann leicht herausgefunden werden, indem man die Zahl findet, die 26 vollständig teilt, die näher am Teiler liegt, und die Differenz der beiden nimmt
13 ist die nächste Zahl nach 7, die 26 vollständig teilt, da nach 7 8, 9, 10, 11, 12 kommt, wobei keine von ihnen 26 vollständig teilt und den Rest 0 ergibt.
13 ist also die Zahl, die 7 am nächsten kommt und sich teilt, um den Rest 0 zu ergeben.
Nehmen Sie nun die Differenz (13 ~ 7) = 5, die der Temainder ist.
Hinweis: Damit dies funktioniert, sollte der Divisor auf seine einfachste Form reduziert werden. Beispiel: Wenn 14 der Divisor ist, muss 7 ausgewählt werden, um die nächste Zahl zu finden, die die Dividende teilt.
quelle
(13 ~ 7) = 5
das Der Unterschied zwischen 13 und 7 ist 6, nicht 5. Was bedeutet "wenn 14 der Teiler ist, muss 7 gewählt werden"? Die Antwort macht keinen Sinn und liefert kein korrektes Ergebnis.Wie Sie sagen, wird das% -Zeichen verwendet, um den Modul (Teilungsrest) zu nehmen.
Auf der JavaScript-Arithmetik-Seite von w3schools können wir im Abschnitt Rest lesen, was ich für eine gute Erklärung halte
Wenn Sie also in Ihrem speziellen Fall versuchen, 7 Bananen in eine Gruppe von 5 Bananen zu unterteilen, können Sie 1 Gruppe von 5 (Quotient) erstellen und es bleiben 2 Bananen (Rest) übrig.
Wenn 5 Bananen zu einer Gruppe von 7 gehören, können Sie das nicht und Sie haben wieder die 5 Bananen (Rest).
quelle