Resto da Divisão
A operação de módulo devolve o resto da divisão inteira. 17 módulo 5 é 2, porque 17 dividido por 5 dá 3 com resto 2.
É a operação que responde "quanto sobra" em vez de "quantas vezes cabe".
Quando o resto é zero, o primeiro número é divisível pelo segundo — e é assim que se testa divisibilidade em praticamente todo código.
Aqui as linguagens divergem, e é a fonte mais comum de bug com módulo.
Em JavaScript, Java, C e C# o resultado herda o sinal do dividendo: menos 7 módulo 3 dá menos 1. Em Python e Ruby o resultado herda o sinal do divisor: a mesma conta dá 2.
As duas convenções são matematicamente defensáveis, mas produzem valores diferentes. Se você porta código entre linguagens e há negativos envolvidos, esse é o primeiro lugar a conferir.
A definição matemática estrita de módulo prevê resultado sempre não negativo — a versão de Python. A versão que segue o sinal do dividendo é, a rigor, o resto da divisão truncada.
- Testar se um número é par: módulo 2 igual a zero.
- Alternar cores de linha em uma tabela: o índice módulo 2 escolhe entre duas classes.
- Distribuir itens em ciclo entre N destinos, como balanceamento de carga simples.
- Aritmética de relógio: somar 8 horas às 20h dá 4h, que é 28 módulo 24.
- Dígitos verificadores de CPF, CNPJ e código de barras, quase todos baseados em módulo 11 ou módulo 10.
Perguntas frequentes
Porque as linguagens usam convenções diferentes. JavaScript, Java e C seguem o sinal do dividendo; Python e Ruby seguem o sinal do divisor. Menos 7 módulo 3 dá menos 1 em uma e 2 na outra.
Para números positivos, sim. Com negativos, "resto" costuma se referir à divisão truncada, e "módulo" à definição matemática de resultado não negativo. A diferença só aparece nesse caso.
Verifique se o módulo é zero. Resto zero significa divisão exata.
A operação é indefinida, assim como a divisão por zero. A ferramenta recusa a entrada em vez de devolver um valor sem sentido.