Divisão e Resto

A divisão de inteiros em C arredonda o resultado para um número inteiro. O resultado é sempre arredondado em direção a zero.

 16 / 35
-16 / 3-5
 16 / -3-5
-16 / -35

Para obter o resto correspondente, use o operador ‘%’:

 16 % 31
-16 % 3-1
 16 % -31
-16 % -3-1

‘%’ tem a mesma precedência de operador que ‘/’ e ‘*’.

A partir do quociente arredondado e do resto, você pode reconstruir o dividendo, assim:

int
original_dividend (int divisor, int quotient, int remainder)
{
  return divisor * quotient + remainder;
}

Para fazer uma divisão não arredondada, use ponto flutuante. Se apenas um operando for de ponto flutuante, ‘/’ converte o outro operando para ponto flutuante.

16.0 / 35.333333333333333
16   / 3.05.333333333333333
16.0 / 3.05.333333333333333
16   / 35

O operador de resto ‘%’ não é permitido para operandos de ponto flutuante, porque não é necessário. O conceito de resto faz sentido para inteiros porque o resultado da divisão de inteiros deve ser um número inteiro. Para ponto flutuante, o resultado da divisão é um número de ponto flutuante, ou seja, uma fração, que diferirá do resultado exato apenas por uma quantidade muito pequena.

Existem funções na biblioteca padrão C para calcular restos a partir da divisão de números de ponto flutuante por valores inteiros. Veja The GNU C Library no The GNU C Library Reference Manual (disponível somente em inglês).

A divisão de inteiros causa estouro em um caso específico: dividir o menor valor negativo para o tipo de dado (veja ) por -1. Isso ocorre porque o resultado correto, que é o número positivo correspondente, não cabe (veja Estouro de Inteiros) no mesmo número de bits. Em alguns computadores atualmente em uso, isso sempre causa um sinal SIGFPE (veja ), o mesmo comportamento que a opção -ftrapv especifica (veja Estouro de Inteiros com Sinal).

A divisão por zero leva a resultados imprevisíveis—dependendo do tipo de computador, pode causar um sinal SIGFPE ou pode produzir um resultado numérico.

Atenção: Certifique-se de que o programa não divide por zero. Se você não puder garantir que o divisor não é zero, teste se ele é zero e pule a divisão, se for o caso.

Atualizado