Antworten:
Das Ergebnis einer Modulodivision ist der Rest einer ganzzahligen Division der gegebenen Zahlen.
Das bedeutet:
27 / 16 = 1, remainder 11
=> 27 mod 16 = 11
Andere Beispiele:
30 / 3 = 10, remainder 0
=> 30 mod 3 = 0
35 / 3 = 11, remainder 2
=> 35 mod 3 = 2
Die meisten Erklärungen übersehen einen wichtigen Schritt. Lassen Sie uns die Lücke anhand eines anderen Beispiels füllen.
Angesichts der folgenden:
Dividend: 16
Divisor: 6
Die Modulfunktion sieht folgendermaßen aus:
16 % 6 = 4
Lassen Sie uns feststellen, warum dies so ist.
Führen Sie zunächst eine Ganzzahldivision durch , die der normalen Division ähnlich ist, mit der Ausnahme, dass eine beliebige Bruchzahl (auch als Rest bezeichnet) verworfen wird:
16 / 6 = 2
Dann multiplizieren Sie das Ergebnis der obigen Division ( 2
) mit unserem Divisor ( 6
):
2 * 6 = 12
Schließlich subtrahiert das Ergebnis der obigen Multiplikation ( 12
) von unserer Dividende ( 16
):
16 - 12 = 4
Das Ergebnis dieser Subtraktion, 4
der Rest , ist das gleiche Ergebnis unseres Moduls oben!
16 // 6 >>> 2
und16 / 6 >>> 2.6666666666666665
Vielleicht könnte Ihnen das Beispiel mit einer Uhr helfen, das Modulo zu verstehen.
Eine bekannte Verwendung der modularen Arithmetik ist die Verwendung in der 12-Stunden-Uhr, in der der Tag in zwei 12-Stunden-Perioden unterteilt ist.
Nehmen wir an, wir haben derzeit diese Zeit: 15:00 Uhr.
Man könnte aber auch sagen, dass es 15 Uhr ist
Genau das macht Modulo:
15 / 12 = 1, remainder 3
Sie finden dieses Beispiel besser erklärt auf Wikipedia: Wikipedia Modulo Article
Die einfache Formel zur Berechnung des Moduls lautet: -
[Dividend-{(Dividend/Divisor)*Divisor}]
Also 27% 16: -
27- {(27/16) * 16}
27- {1 * 16}
Antwort = 11
Hinweis :
Alle Berechnungen erfolgen mit ganzen Zahlen. Bei einem Dezimalquotienten ist der Teil nach der Dezimalstelle zu ignorieren / abzuschneiden.
Beispiel: 27/16 = 1,6875 ist in der oben genannten Formel als nur 1 anzunehmen. 0,6875 wird ignoriert.
Compiler von Computersprachen behandeln eine Ganzzahl mit Dezimalteil genauso (durch Abschneiden nach der Dezimalstelle)
Der Moduloperator nimmt eine Divisionsanweisung und gibt zurück, was von dieser Berechnung übrig bleibt, sozusagen die "verbleibenden" Daten, wie z. B. 13/5 = 2. Das heißt, es sind noch 3 übrig oder von dieser Berechnung übrig. Warum? weil 2 * 5 = 10. Somit ist 13 - 10 = 3.
Der Moduloperator führt die gesamte Berechnung für Sie durch, 13% 5 = 3.
Sehr einfach: a % b
ist definiert als der Rest der Division von a
durch b
.
Weitere Beispiele finden Sie im Wikipedia-Artikel .
Ich möchte noch etwas hinzufügen:
Es ist einfach, Modulo zu berechnen, wenn die Dividende größer / größer als der Divisor ist
Dividende = 5 Divisor = 3
5% 3 = 2
3)5(1
3
-----
2
aber was ist, wenn der Divisor kleiner als die Dividende ist?
Dividende = 3 Divisor = 5
3% 5 = 3 ?? Wie
Dies liegt daran, dass Modulo die Dividende ist, da 5 3 nicht direkt teilen kann
Ich hoffe, diese einfachen Schritte helfen:
20 % 3 = 2
20 / 3 = 6
;; Fügen Sie das nicht hinzu .6667
- ignorieren Sie es einfach3 * 6 = 18
20 - 18 = 2
, das ist der Rest des ModuloEinfacher, wenn Ihre Zahl nach der Dezimalstelle (0.xxx) kurz ist. Dann müssen Sie nur noch diese Zahl mit der Zahl nach der Division multiplizieren.
Ex: 32 % 12 = 8
Sie 32/12=2.666666667
Dann werfen Sie die 2
weg, und konzentrieren sich auf die 0.666666667
0.666666667*12=8
<- Das ist deine Antwort.
(wieder nur einfach, wenn die Zahl nach der Dezimalstelle kurz ist)
Nehmen wir an, Sie haben 17 Mod 6.
Welche Summe von 6 bringt Sie am nächsten an 17, es wird 12 sein, denn wenn Sie über 12 gehen, haben Sie 18, was mehr ist als die Frage von 17 Mod 6. Sie werden dann 12 und minus von 17 nehmen, was Ihnen geben wird Ihre Antwort, in diesem Fall 5.
17 mod 6 = 5
Die Modulteilung ist ziemlich einfach. Es wird der Rest anstelle des Quotienten verwendet.
1.0833... <-- Quotient
__
12|13
12
1 <-- Remainder
1.00 <-- Remainder can be used to find decimal values
.96
.040
.036
.0040 <-- remainder of 4 starts repeating here, so the quotient is 1.083333...
13/12 = 1R1, also 13% 12 = 1.
Es hilft, sich den Modul als "Zyklus" vorzustellen.
Mit anderen Worten, für den Ausdruck n % 12
ist das Ergebnis immer <12.
Das heißt, die Reihenfolge für das Set 0..100
für n % 12
lautet:
{0,1,2,3,4,5,6,7,8,9,10,11,0,1,2,3,4,5,6,7,8,9,10,11,0,[...],4}
In diesem Licht wird der Modul sowie seine Verwendung viel klarer.
Das einzig Wichtige zu verstehen ist, dass der Modul (hier mit% wie in C bezeichnet) durch die euklidische Division definiert wird .
Für zwei beliebige (d, q)
ganze Zahlen gilt immer Folgendes :
d = ( d / q ) * q + ( d % q )
Wie Sie sehen können, d%q
hängt der Wert von vom Wert von abd/q
. Generell gilt für positive ganze Zahlen d/q
wird in Richtung Null abgeschnitten , zum Beispiel 5/2 2 gibt, daher:
5 = (5/2)*2 + (5%2) => 5 = 2*2 + (5%2) => 5%2 = 1
Bei negativen ganzen Zahlen ist die Situation jedoch weniger klar und hängt von der Sprache und / oder dem Standard ab. Zum Beispiel kann -5/2 -2 zurückgeben (wie zuvor gegen Null abgeschnitten), aber auch -3 zurückgeben (mit einer anderen Sprache).
Im ersten Fall:
-5 = (-5/2)*2 + (-5%2) => -5 = -2*2 + (-5%2) => -5%2 = -1
aber im zweiten:
-5 = (-5/2)*2 + (-5%2) => -5 = -3*2 + (-5%2) => -5%2 = +1
Denken Sie, wie gesagt, nur an die Invariante , die die euklidische Division ist .
Weitere Details:
27% 16 = 11
Sie können es so interpretieren:
16 geht 1 mal in 27, bevor es passiert wird.
16 * 2 = 32.
Man könnte also sagen, dass 16 einmal in 27 mit einem Rest von 11 geht.
Eigentlich,
16 + 11 = 27
Ein anderes Beispiel:
20% 3 = 2
Nun, 3 geht 6 mal in 20, bevor es passiert wird.
3 * 6 = 18
Um 20 zu addieren, benötigen wir 2, sodass der Rest des Modulausdrucks 2 ist.
Es ist einfach, der Moduloperator (%) gibt den Rest nach der Ganzzahldivision zurück. Nehmen wir das Beispiel Ihrer Frage. Wie 27% 16 = 11? Wenn Sie einfach 27 durch 16 teilen, dh (27/16), erhalten Sie den Rest als 11, und deshalb lautet Ihre Antwort 11.
Schreiben Sie eine Tabelle, die mit 0 beginnt.
{0,1,2,3,4}
Setzen Sie die Tabelle in Zeilen fort.
{0,1,2,3,4}
{5,6,7,8,9}
{10,11,12,13,14}
Alles in Spalte eins ist ein Vielfaches von 5. Alles in Spalte 2 ist ein Vielfaches von 5 mit 1 als Rest. Nun zum abstrakten Teil: Sie können das (1) als 1/5 oder als Dezimalerweiterung schreiben. Der Moduloperator gibt nur die Spalte zurück, oder in einer anderen Denkweise gibt er den Rest bei langer Division zurück. Sie haben es mit Modulo (5) zu tun. Unterschiedlicher Modul, unterschiedliche Tabelle. Denken Sie an eine Hash-Tabelle.
Wenn wir zwei ganze Zahlen teilen, erhalten wir eine Gleichung, die wie folgt aussieht:
A / B = Q Rest R.
A ist die Dividende; B ist der Teiler; Q ist der Quotient und R ist der Rest
Manchmal interessiert uns nur, was der Rest ist, wenn wir A durch B teilen. In diesen Fällen gibt es einen Operator namens Modulo-Operator (abgekürzt als mod).
Beispiele
16/5= 3 Remainder 1 i.e 16 Mod 5 is 1.
0/5= 0 Remainder 0 i.e 0 Mod 5 is 0.
-14/5= 3 Remainder 1 i.e. -14 Mod 5 is 1.
Siehe Khan Academy Artikel für weitere Informationen.
In der Informatik verwendet die Hash-Tabelle den Mod-Operator, um das Element zu speichern, wobei A die Werte nach dem Hashing sind, B die Tabellengröße ist und R die Anzahl der Slots oder Schlüssel ist, in die das Element eingefügt wird.
Siehe Wie funktioniert eine Hash - Tabelle Arbeiten für weitere Informationen
Dies war für mich der beste Ansatz, um den Moduloperator zu verstehen. Ich werde es Ihnen nur anhand von Beispielen erklären.
16 % 3
Wenn Sie diese beiden Zahlen teilen, ist der Rest das Ergebnis. So mache ich das.
16 % 3 = 3 + 3 = 6; 6 + 3 = 9; 9 + 3 = 12; 12 + 3 = 15
Was also 16 übrig bleibt, ist 1
16 % 3 = 1
Hier noch ein Beispiel: 16 % 7 = 7 + 7 = 14
Was bleibt 16? Ist2
16 % 7 = 2
Noch eins : 24 % 6 = 6 + 6 = 12; 12 + 6 = 18; 18 + 6 = 24
. Der Rest ist also Null,24 % 6 = 0