Introducción
Estaba haciendo un programa para convertir un número entero a binario, cuando de repente vino a mi mente cómo dividir un número de forma entera, sacando el resultado (cociente) y lo que sobra (residuo) en una sola operación; y ahí es en donde entra la función div en C para dividir números.
Función div en C
Ok, yo sé que se puede dividir con el operador /
. Pero, ¿cómo dividimos de manera entera?
Es decir, yo puedo dividir 5 entre 2 y el resultado es 2.5, pero si quiero sacar el sobrante o residuo por separado entonces digo que 5 entre 2 es 2, y sobra 1.
La función div en C hace justamente eso: realiza la operación y regresa el cociente y el residuo de una división en una llamada a la función.
API de la función div en C
Esta función recibe dos enteros: el numerador y el denominador, en el orden en el que dividimos.
En otras palabras, si al dividir usamos 5 / 2
ahora llamamos a la función con div(5, 2)
Regresa una variable de tipo div_t
que es un struct (algo así como un objeto) que a su vez tiene dos variables: cociente y residuo. El cociente está en .quot
y el residuo en .rem
Uso de la función div en C
Vamos a ejemplificar su uso al dividir 5 entre 2. Primero debemos incluir la librería que define el tipo div_t
así como la función div
; dicha librería se llama stdlib.h.
Por lo tanto, hacemos un #include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
// La variable resultadoDeLaDivision es
// de tipo div_t
div_t resultadoDeLaDivision;
resultadoDeLaDivision = div(5, 2);
printf(
"El cociente es %d y el residuo es %d\n",
resultadoDeLaDivision.quot,
resultadoDeLaDivision.rem
);
return 0;
}
Al ejecutar el programa, la salida es:
Por lo que ha dividido enteramente, y ha tomado el residuo por separado. Internamente la función usa el operador %
para sacar el residuo, y el operador /
para dividir.
De esta manera podemos obtener el residuo y cociente en una única llamada a una función, además de que es un poco más expresivo.
Por cierto, también existe la función ldiv
(es una L, no una I la del inicio) que es parecida pero funciona mejor para números de tipo long int
.
Referencias
Como lo dije, buscaba la manera de dividir y obtener las cosas por separado, la respuesta la encontré en este post: https://stackoverflow.com/questions/7943126/divide-without-losing-remainder
Pingback: Convertir un número decimal a binario en c - Parzibyte's blog