¿Cómo funciona la división de módulos?

105

Realmente no entiendo cómo funciona la división de módulos. Estaba calculando 27 % 16y terminé con 11y no entiendo por qué.

Parece que no puedo encontrar una explicación en términos sencillos en línea. ¿Alguien puede explicar a un nivel muy alto lo que está pasando aquí?

NSWOA
fuente

Respuestas:

107

El resultado de una división de módulo es el resto de una división entera de los números dados.

Eso significa:

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

Otros ejemplos:

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

35 / 3 = 11, remainder 2
=> 35 mod 3 = 2
León
fuente
66
por favor, no lo tome a mal, pero sus ejemplos no aclaran nada para alguien que no tiene ni idea de lo que está sucediendo con la división modulosa. Dejó de lado pasos muy importantes que explican de dónde proviene ese resto. La respuesta de Marcin M. a continuación explica mejor el proceso. Considere ser más detallado en las respuestas futuras para aquellos de nosotros que no comprendamos un concepto en absoluto. ¡Gracias por ser un miembro colaborador de la comunidad! Personas como tú me ayudan y continúan ayudándome en mi viaje educativo :)
Soundfx4
A pesar de Wikipedia, módulo y resto no son lo mismo. Algunos idiomas tienen uno, otros el otro, algunos ambos y algunos indefinidos.
Marqués de Lorne
156

La mayoría de las explicaciones pierden un paso importante, llenemos el vacío con otro ejemplo.

Dado lo siguiente:

Dividend: 16
Divisor: 6

La función de módulo se ve así:

16 % 6 = 4

Determinamos por qué es así.

Primero, realice la división de enteros , que es similar a la división normal, excepto que se descarta cualquier número fraccionario (también conocido como resto):

16 / 6 = 2

Luego, multiplica el resultado de la división anterior ( 2) con nuestro divisor ( 6):

2 * 6 = 12

Finalmente, reste el resultado de la multiplicación anterior ( 12) de nuestro dividendo ( 16):

16 - 12 = 4

El resultado de esta resta, 4el resto , es el mismo resultado de nuestro módulo anterior.

Marcin M. Jessa
fuente
1
¿Cómo se obtiene 2 de 16/6 y no 2,6666666667? ¿Debería siempre ignorar el 0, ...? ¿Por qué?
Luc
3
@Luc Como mencionan Leo e ytpillai, estamos usando la división de enteros (donde se descarta la parte fraccionaria del resultado después de dividir). En Python 3: 16 // 6 >>> 2y16 / 6 >>> 2.6666666666666665
bryik
30

Quizás el ejemplo con un reloj podría ayudarlo a comprender el módulo.

Un uso familiar de la aritmética modular es su uso en el reloj de 12 horas, en el que el día se divide en dos períodos de 12 horas.

Digamos que actualmente tenemos esta hora: 15:00
Pero también se podría decir que son las 3 pm

Esto es exactamente lo que hace el módulo:

15 / 12 = 1, remainder 3

Encuentra este ejemplo mejor explicado en wikipedia: Artículo de módulo de Wikipedia

Prine
fuente
29

La fórmula simple para calcular el módulo es: -

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

Entonces, 27% 16: -

27- {(27/16) * 16}

27- {1 * 16}

Respuesta = 11

Nota :

Todos los cálculos se realizan con números enteros. En el caso de un cociente decimal, la parte posterior al decimal debe ignorarse / truncarse.

Por ejemplo: 27/16 = 1,6875 debe tomarse como 1 en la fórmula mencionada anteriormente. 0,6875 se ignora.

Los compiladores de lenguajes informáticos tratan un número entero con parte decimal de la misma manera (truncando después del decimal) también

Code_Jamer
fuente
¿Qué pasa con el 3% 7?
eaglei22
¿Entonces serían solo 3?
eaglei22
15

El operador de módulo toma una declaración de división y devuelve lo que queda de ese cálculo, los datos "restantes", por así decirlo, como 13/5 = 2. Lo que significa que quedan 3, o que quedan de ese cálculo. ¿Por qué? porque 2 * 5 = 10. Por lo tanto, 13 - 10 = 3.

El operador de módulo hace todo ese cálculo por usted, 13% 5 = 3.

RebelPhoenix
fuente
Creo que esta respuesta lo explica mejor desde un punto de vista conceptual. Otras respuestas explican matemáticamente lo que también es necesario, pero esto me ayuda a comprender mejor cómo podría aplicar el operador de módulo.
JonnyB
7

La división de módulo es simplemente esto: divide dos números y devuelve solo el resto

27/16 = 1 con 11 sobrantes, por lo tanto 27% 16 = 11

ídem 43/16 = 2 con 11 sobrantes así que 43% 16 = 11 también

chris
fuente
6

Muy simple: a % bse define como el resto de la división de aporb .

Consulte el artículo de wikipedia para obtener más ejemplos.

Yuval Adam
fuente
5

Me gustaría agregar una cosa más:

es fácil calcular el módulo cuando el dividendo es mayor / mayor que el divisor

dividendo = 5 divisor = 3

5% 3 = 2

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

pero ¿y si el divisor es menor que el dividendo?

dividendo = 3 divisor = 5

3% 5 = 3 ?? cómo

Esto se debe a que, dado que 5 no puede dividir a 3 directamente, módulo será el dividendo

bn00d
fuente
3

Espero que estos sencillos pasos te ayuden:

20 % 3 = 2 
  1. 20 / 3 = 6; no incluya el .6667- simplemente ignórelo
  2. 3 * 6 = 18
  3. 20 - 18 = 2, que es el resto del módulo
Mustafe
fuente
¿Podrías formatear esta respuesta un poco mejor?
Code Maverick
Verifique la respuesta de Code Jammer.
Ajmal Salim
2

Más fácil cuando su número después del decimal (0.xxx) es corto. Luego, todo lo que necesitas hacer es multiplicar ese número por el número después de la división.

Ex: 32 % 12 = 8

Lo haces. 32/12=2.666666667 Entonces tiras lo que quieras 2y te concentras en el 0.666666667 0.666666667*12=8<- Esa es tu respuesta.

(nuevamente, solo es fácil cuando el número después del decimal es corto)

Gc220
fuente
1

La división de módulo le da el resto de una división, en lugar del cociente.

Samoz
fuente
1

Digamos que tienes 17 mod 6.

qué total de 6 te acercará más a 17, será 12 porque si pasas de 12 tendrás 18 que es más que la pregunta de 17 mod 6. Luego tomarás 12 y menos de 17, lo que te dará su respuesta, en este caso 5.

17 mod 6 = 5

Chad Finch
fuente
1

La división de módulos es bastante simple. Utiliza el resto en lugar del cociente.

    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.


Ayuda pensar en el módulo como un "ciclo".

En otras palabras, para la expresión n % 12, el resultado siempre será <12.

Eso significa que la secuencia para el conjunto 0..100de n % 12es:

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

En ese sentido, el módulo, así como sus usos, se vuelve mucho más claro.

Braden Best
fuente
1

Lo único importante que hay que entender es que el módulo (indicado aquí por% como en C) se define mediante la división euclidiana .

Para dos (d, q)enteros cualesquiera, lo siguiente siempre es cierto :

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

Como puede ver, el valor de d%q depende del valor de d/q . Generalmente para enteros positivos d/qse trunca hacia cero , por ejemplo, 5/2 da 2, por lo tanto:

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

Sin embargo, para los números enteros negativos, la situación es menos clara y depende del idioma y / o el estándar. Por ejemplo, -5/2 puede devolver -2 (truncado hacia cero como antes) pero también puede devolver -3 (con otro idioma).

En el primer caso:

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

pero en el segundo:

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

Como se dijo antes, solo recuerde el invariante , que es la división euclidiana .

Más detalles:

Picaud Vincent
fuente
1
Sorprendentemente útil con respecto a la paginación.
Bob Jordan
1

27% 16 = 11

Puedes interpretarlo de esta manera:

16 va 1 vez en 27 antes de pasarlo.

16 * 2 = 32.

Entonces, se podría decir que 16 va una vez en 27 con un resto de 11.

De hecho,

16 + 11 = 27

Otro ejemplo:

20% 3 = 2

Bueno, 3 va 6 veces en 20 antes de pasarlo.

3 * 6 = 18

Para sumar 20 necesitamos 2, por lo que el resto de la expresión del módulo es 2.

Guillermo
fuente
0

Es simple, el operador de módulo (%) devuelve el resto después de la división entera. Tomemos el ejemplo de tu pregunta. ¿Cómo 27% 16 = 11? Cuando simplemente divide 27 entre 16, es decir (27/16), obtiene el resto como 11, y es por eso que su respuesta es 11.

Shiraz Shrestha
fuente
0

Escribe una tabla que comience con 0.

{0,1,2,3,4}

Continúe la tabla en filas.

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

Todo en la columna uno es un múltiplo de 5. Todo en la columna 2 es un múltiplo de 5 con 1 como resto. Ahora la parte abstracta: puedes escribir eso (1) como 1/5 o como una expansión decimal. El operador de módulo devuelve solo la columna, o en otra forma de pensar, devuelve el resto en una división larga. Se trata de módulo (5). Módulo diferente, mesa diferente. Piense en una tabla hash.

Terrence McLaughlin
fuente
0

Cuando dividimos dos números enteros tendremos una ecuación que se parece a la siguiente:

A / B = Q resto R

A es el dividendo; B es el divisor; Q es el cociente y R es el resto

A veces, solo nos interesa saber cuál es el resto cuando dividimos A por B. Para estos casos existe un operador llamado operador módulo (abreviado como mod).

Ejemplos

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.

Consulte el artículo de Khan Academy para obtener más información.

En Ciencias de la Computación, la tabla Hash usa el operador Mod para almacenar el elemento donde A serán los valores después del hash, B será el tamaño de la tabla y R es el número de ranuras o clave donde se inserta el elemento.

Consulte Cómo funciona una tabla hash para obtener más información.

Yogendra Paudyal
fuente
-1

Este fue el mejor enfoque para mí para comprender el operador de módulo. Solo te lo explicaré a través de ejemplos.

16 % 3

Cuando divides estos dos números, el resultado es el resto. Así es como lo hago.

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

Entonces, lo que queda a 16 es 1

16 % 3 = 1

Aquí hay un ejemplo más: 16 % 7 = 7 + 7 = 14¿qué le queda a 16? Es2 16 % 7 = 2

Uno más: 24 % 6 = 6 + 6 = 12; 12 + 6 = 18; 18 + 6 = 24 . Entonces el resto es cero,24 % 6 = 0

Nemus
fuente