Wie funktioniert die Modulteilung?


104

Ich verstehe nicht wirklich, wie die Modulteilung funktioniert. Ich habe gerechnet 27 % 16und bin damit fertig geworden 11und ich verstehe nicht warum.

Ich kann online keine Erklärung für Laien finden. Kann jemand auf sehr hohem Niveau erläutern, was hier vor sich geht?

Antworten:


106

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

66
Bitte verstehe das nicht falsch, aber deine Beispiele klären nichts für jemanden, der absolut keine Ahnung hat, was mit modulierter Teilung los ist. Sie haben sehr wichtige Schritte ausgelassen, die erklären, woher dieser Rest kommt. Die Antwort von Marcin M. erklärte den Prozess besser. Bitte denken Sie daran, in zukünftigen Antworten für diejenigen von uns, die möglicherweise überhaupt kein Konzept verstehen, detaillierter zu sein. Vielen Dank, dass Sie ein beitragendes Mitglied der Community sind! Leute wie du helfen mir und helfen mir weiterhin auf meiner Bildungsreise :)
Soundfx4

Ungeachtet von Wikipedia sind Modul und Rest nicht dasselbe. Einige Sprachen haben eine, einige die andere, einige beide und einige undefiniert.
Marquis von Lorne

156

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, 4der Rest , ist das gleiche Ergebnis unseres Moduls oben!


1
Wie bekommt man 2 von 16/6 und nicht 2.6666666667? Sollten Sie die 0 immer einfach ignorieren, ...? Warum?
Luc

3
@Luc Wie Leo und ytpillai erwähnen, verwenden wir die Ganzzahldivision (wobei der Bruchteil des Ergebnisses nach der Division verworfen wird). In Python 3: 16 // 6 >>> 2und16 / 6 >>> 2.6666666666666665
Bryik

30

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


29

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)


Was ist mit 3% 7?
eaglei22

Also wäre es nur 3?
eaglei22

15

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.


Ich denke, diese Antwort erklärt es vom konzeptionellen Standpunkt aus am besten. Andere Antworten erklären mathematisch, was ebenfalls notwendig ist, aber dies hilft mir besser zu verstehen, wie ich den Modulo-Operator anwenden könnte.
JonnyB

7

Die Modulteilung ist einfach so: Teilen Sie zwei Zahlen und geben Sie nur den Rest zurück

27/16 = 1 mit 11 übrig, daher 27% 16 = 11

dito 43/16 = 2 mit 11 übrig, also 43% 16 = 11 auch



5

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


3

Ich hoffe, diese einfachen Schritte helfen:

20 % 3 = 2 
  1. 20 / 3 = 6;; Fügen Sie das nicht hinzu .6667- ignorieren Sie es einfach
  2. 3 * 6 = 18
  3. 20 - 18 = 2, das ist der Rest des Modulo

Könnten Sie diese Antwort bitte etwas besser formatieren?
Code Maverick

Überprüfen Sie die Antwort von Code Jammer.
Ajmal Salim

2

Einfacher, 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 2weg, 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)


1

Die Modulteilung gibt Ihnen den Rest einer Teilung und nicht den Quotienten.


1

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


1

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 % 12ist das Ergebnis immer <12.

Das heißt, die Reihenfolge für das Set 0..100für n % 12lautet:

{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.


1

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/qwird 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:


1
Überraschend nützlich in Bezug auf die Paginierung.
Bob Jordan

1

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.


0

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.


0

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.


0

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


-1

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 = 14Was 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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.