Come funziona Modulus Divison


105

Non capisco davvero come funziona la divisione del modulo. Stavo calcolando 27 % 16e mi sono ritrovato 11e non capisco perché.

Non riesco a trovare una spiegazione in termini profani online. Qualcuno può elaborare ad un livello molto alto cosa sta succedendo qui?

Risposte:


107

Il risultato di una divisione modulo è il resto di una divisione intera dei numeri dati.

Questo significa:

27 / 16 = 1, remainder 11
=> 27 mod 16 = 11

Altri esempi:

30 / 3 = 10, remainder 0
=> 30 mod 3 = 0

35 / 3 = 11, remainder 2
=> 35 mod 3 = 2

66
per favore non prenderlo nel modo sbagliato, ma i tuoi esempi non chiariscono nulla per qualcuno che non ha assolutamente idea di cosa stia succedendo con la divisione modulata. Hai tralasciato passaggi molto importanti che spiegano da dove proviene quel resto. La risposta di Marcin M. di seguito ha spiegato meglio il processo. Si prega di considerare di essere più dettagliati nelle risposte future per quelli di noi che potrebbero non avere alcuna comprensione di un concetto. Grazie per essere un membro che contribuisce alla comunità! Persone come te mi aiutano e continuano ad aiutarmi nel mio viaggio educativo :)
Soundfx4

Nonostante Wikipedia, modulo e resto non sono la stessa cosa. Alcune lingue ne hanno una, altre l'altra, alcune entrambe e altre indefinite.
Marchese di Lorne

156

La maggior parte delle spiegazioni salta un passaggio importante, riempiamo il vuoto utilizzando un altro esempio.

Dato quanto segue:

Dividend: 16
Divisor: 6

La funzione modulo ha questo aspetto:

16 % 6 = 4

Determiniamo perché questo è.

Innanzitutto, esegui la divisione di numeri interi , che è simile alla divisione normale, tranne per il fatto che qualsiasi numero frazionario (noto anche come resto) viene scartato:

16 / 6 = 2

Quindi, moltiplica il risultato della divisione precedente ( 2) con il nostro divisore ( 6):

2 * 6 = 12

Infine, sottrai il risultato della moltiplicazione sopra ( 12) dal nostro dividendo ( 16):

16 - 12 = 4

Il risultato di questa sottrazione, 4il resto , è lo stesso risultato del nostro modulo sopra!


1
Come si ottengono 2 su 16/6 e non 2.6666666667? Dovresti sempre ignorare lo 0, ...? Perché?
Luc

3
@Luc Come menzionano Leo e ytpillai, stiamo usando la divisione intera (dove la parte frazionaria del risultato dopo la divisione viene scartata). In Python 3: 16 // 6 >>> 2e16 / 6 >>> 2.6666666666666665
bryik

30

Forse l'esempio con un orologio potrebbe aiutarti a capire il modulo.

Un uso familiare dell'aritmetica modulare è il suo utilizzo nell'orologio di 12 ore, in cui il giorno è diviso in due periodi di 12 ore.

Diciamo che al momento abbiamo questo orario: 15:00
Ma potresti anche dire che sono le 15:00

Questo è esattamente ciò che fa il modulo:

15 / 12 = 1, remainder 3

Trovi questo esempio meglio spiegato su wikipedia: Wikipedia Modulo Article


29

La semplice formula per il calcolo del modulo è: -

[Dividend-{(Dividend/Divisor)*Divisor}]

Quindi, 27% 16: -

27- {(27/16) * 16}

27- {1} 16 *

Risposta = 11

Nota :

Tutti i calcoli sono con numeri interi. In caso di quoziente decimale, la parte dopo il decimale deve essere ignorata / troncata.

es: 27/16 = 1,6875 è da prendere come solo 1 nella formula sopra menzionata. 0.6875 viene ignorato.

I compilatori di linguaggi informatici trattano allo stesso modo un numero intero con parte decimale (troncandolo dopo il decimale)


E il 3% 7?
eaglei22

Quindi sarebbero solo 3?
eaglei22

15

L'operatore modulo prende un'istruzione di divisione e restituisce tutto ciò che resta da quel calcolo, i dati "rimanenti", per così dire, come 13/5 = 2. Il che significa che ne rimangono 3 o restano da quel calcolo. Perché? perché 2 * 5 = 10. Quindi, 13 - 10 = 3.

L'operatore modulo esegue tutti i calcoli per te, 13% 5 = 3.


Penso che questa risposta lo spieghi al meglio da un punto di vista concettuale. Altre risposte spiegano matematicamente che è anche necessario, ma questo mi aiuta a capire meglio come potrei applicare l'operatore modulo.
JonnyB

7

la divisione del modulo è semplicemente questa: dividere due numeri e restituire solo il resto

27/16 = 1 con 11 rimasti, quindi 27% 16 = 11

idem 43/16 = 2 con 11 rimasti, quindi anche il 43% 16 = 11



5

Vorrei aggiungere un'altra cosa:

è facile calcolare il modulo quando il dividendo è maggiore / maggiore del divisore

dividendo = 5 divisore = 3

5% 3 = 2

3)5(1
  3
-----
  2

ma cosa succede se il divisore è inferiore al dividendo

dividendo = 3 divisore = 5

3% 5 = 3 ?? Come

Questo perché, poiché 5 non può dividere 3 direttamente, modulo sarà ciò che è il dividendo


3

Spero che questi semplici passaggi ti siano d'aiuto:

20 % 3 = 2 
  1. 20 / 3 = 6; non includere il .6667- ignoralo
  2. 3 * 6 = 18
  3. 20 - 18 = 2, che è il resto del modulo

Potresti formattare questa risposta un po 'meglio?
Code Maverick

Controlla la risposta di Code Jammer.
Ajmal Salim

2

Più facile quando il tuo numero dopo il decimale (0.xxx) è breve. Quindi tutto ciò che devi fare è moltiplicare quel numero per il numero dopo la divisione.

Ex: 32 % 12 = 8

Lo fai. 32/12=2.666666667 Poi butti 2via e ti concentri su 0.666666667 0.666666667*12=8<- Questa è la tua risposta.

(di nuovo, facile solo quando il numero dopo il decimale è breve)


1

La divisione del modulo ti dà il resto di una divisione, piuttosto che il quoziente.


1

Diciamo che hai 17 mod 6.

il totale di 6 ti farà avvicinare di più a 17, sarà 12 perché se vai oltre 12 avrai 18 che è più della domanda di 17 mod 6. Prenderai quindi 12 e meno da 17 che ti darà la tua risposta, in questo caso 5.

17 mod 6 = 5


1

La divisione del modulo è piuttosto semplice. Utilizza il resto invece del quoziente.

    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, ergo 13% 12 = 1.


Aiuta a pensare al modulo come a un "ciclo".

In altre parole, per l'espressione n % 12, il risultato sarà sempre <12.

Ciò significa che la sequenza per il set 0..100per n % 12è:

{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 quella luce, il modulo, così come i suoi usi, diventa molto più chiaro.


1

L'unica cosa importante da capire è che il modulo (indicato qui da% come in C) è definito attraverso la divisione euclidea .

Per due (d, q)numeri interi è sempre vero quanto segue :

d = ( d / q ) * q + ( d % q )

Come puoi vedere il valore di d%q dipende dal valore di d/q . Generalmente per interi positivi d/qviene troncato verso zero , ad esempio 5/2 dà 2, quindi:

5 = (5/2)*2 + (5%2) => 5 = 2*2 + (5%2) => 5%2 = 1

Tuttavia per interi negativi la situazione è meno chiara e dipende dalla lingua e / o dallo standard. Ad esempio -5/2 può restituire -2 (troncato verso zero come prima) ma può anche restituire -3 (con un'altra lingua).

Nel primo caso:

-5 = (-5/2)*2 + (-5%2) => -5 = -2*2 + (-5%2) => -5%2 = -1

ma nella seconda:

-5 = (-5/2)*2 + (-5%2) => -5 = -3*2 + (-5%2) => -5%2 = +1

Come detto prima, ricorda solo l' invariante , che è la divisione euclidea .

Maggiori dettagli:


1
Sorprendentemente utile per quanto riguarda l'impaginazione.
Bob Jordan

1

27% 16 = 11

Puoi interpretarlo in questo modo:

16 va 1 volta su 27 prima di passarlo.

16 * 2 = 32.

Quindi si potrebbe dire che 16 va una volta su 27 con un resto di 11.

Infatti,

16 + 11 = 27

Un altro esempio:

20% 3 = 2

Ebbene 3 va 6 volte su 20 prima di passarlo.

3 * 6 = 18

Per sommare a 20 abbiamo bisogno di 2, quindi il resto dell'espressione del modulo è 2.


0

È semplice, l'operatore Modulo (%) restituisce il resto dopo la divisione di numeri interi. Facciamo l'esempio della tua domanda. Quanto 27% 16 = 11? Quando dividi semplicemente 27 per 16, ovvero (27/16), ottieni il resto come 11, ed è per questo che la tua risposta è 11.


0

Scrivi una tabella che inizia con 0.

{0,1,2,3,4}

Continua la tabella in righe.

{0,1,2,3,4}
{5,6,7,8,9}
{10,11,12,13,14}

Tutto nella colonna uno è un multiplo di 5. Tutto nella colonna 2 è un multiplo di 5 con 1 come resto. Ora la parte astratta: puoi scrivere quella (1) come 1/5 o come espansione decimale. L'operatore modulo restituisce solo la colonna, o in un altro modo di pensare, restituisce il resto sulla divisione lunga. Stai trattando in modulo (5). Modulo diverso, tabella diversa. Pensa a una tabella hash.


0

Quando dividiamo due numeri interi avremo un'equazione simile alla seguente:

A / B = Q resto R

A è il dividendo; B è il divisore; Q è il quoziente e R è il resto

A volte, siamo interessati solo a ciò che è il resto quando dividiamo A per B. Per questi casi esiste un operatore chiamato operatore modulo (abbreviato come mod).

Esempi

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.

Vedere l' articolo della Khan Academy per ulteriori informazioni.

In informatica, la tabella hash utilizza l'operatore Mod per memorizzare l'elemento in cui A saranno i valori dopo l'hashing, B sarà la dimensione della tabella e R è il numero di slot o la chiave in cui l'elemento è inserito.

Vedere Come funziona una tabella hash per ulteriori informazioni


-1

Questo è stato l'approccio migliore per me per comprendere l'operatore modulo. Ti spiegherò solo attraverso esempi.

16 % 3

Quando dividi questi due numeri, il risultato è il resto. Questo è il modo in cui lo faccio.

16 % 3 = 3 + 3 = 6; 6 + 3 = 9; 9 + 3 = 12; 12 + 3 = 15

Quindi ciò che resta a 16 è 1

16 % 3 = 1

Ecco un altro esempio: 16 % 7 = 7 + 7 = 14cosa resta a 16? È2 16 % 7 = 2

Un altro: 24 % 6 = 6 + 6 = 12; 12 + 6 = 18; 18 + 6 = 24 . Quindi il resto è zero,24 % 6 = 0

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.