El operador módulo en C

Jinku Hu 12 octubre 2023
  1. Usar el Operador Modulo % para Calcular el Resto en la División en C
  2. Uso del operador % para implementar la función de comprobación del año bisiesto en C
  3. Usar el Operador Modulo % para generar números aleatorios en el rango de enteros dado en C
El operador módulo en C

Este artículo demostrará múltiples métodos de cómo usar el operador módulo en C.

Usar el Operador Modulo % para Calcular el Resto en la División en C

El operador módulo % es uno de los operadores aritméticos binarios en el lenguaje C. Produce el resto después de la división de dos números dados. El operador módulo no puede ser aplicado a números de punto flotante como float o double. En el siguiente código de ejemplo, mostramos el caso más simple posible para usar el operador %, imprimiendo los resultados del módulo 9 del array int dada.

#include <stdio.h>
#include <stdlib.h>

int main(void) {
  int arr[8] = {10, 24, 17, 35, 65, 89, 55, 77};

  for (int i = 0; i < 8; ++i) {
    printf("%d/%d yields the remainder of - %d\n", arr[i], 9, arr[i] % 9);
  }

  exit(EXIT_SUCCESS);
}

Producción :

10/9 yields the remainder of - 1
24/9 yields the remainder of - 6
17/9 yields the remainder of - 8
35/9 yields the remainder of - 8
65/9 yields the remainder of - 2
89/9 yields the remainder of - 8
55/9 yields the remainder of - 1
77/9 yields the remainder of - 5

Uso del operador % para implementar la función de comprobación del año bisiesto en C

Alternativamente, podemos utilizar el operador % para implementar funciones más complejas. El siguiente código de ejemplo demuestra la función booleana isLeapYear que comprueba si el año dado es bisiesto o no. Tenga en cuenta que un año se considera bisiesto si su valor es divisible por 4 pero no es divisible por 100. Además, si el valor del año es divisible por 400, es un año bisiesto.

#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

bool isLeapYear(int year) {
  if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
    return true;
  else
    return false;
}

int main(void) {
  uint year = 2021;
  isLeapYear(year) ? printf("%d is leap\n", year)
                   : printf("%d is not leap\n", year);

  exit(EXIT_SUCCESS);
}

Producción :

2021 is not leap

Usar el Operador Modulo % para generar números aleatorios en el rango de enteros dado en C

Otra característica útil del operador módulo es limitar el piso superior de los números durante el proceso de generación de números aleatorios. Es decir, supongamos que tenemos una función que genera el número entero aleatorio. En ese caso, podemos tomar el resto de la división entre el número devuelto y el valor que necesitamos que sea el máximo (definido como macro MAX en el siguiente ejemplo). Tenga en cuenta que el uso de las funciones srand y rand para la generación de números aleatorios no es un método robusto, y las aplicaciones que requieran números aleatorios de calidad deben emplear otras facilidades.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define COUNT 10
#define MAX 100

int main(void) {
  srand(time(NULL));
  for (int i = 0; i < COUNT; i++) {
    printf("%d, ", rand() % MAX);
  }
  printf("\b\b  \n");

  exit(EXIT_SUCCESS);
}

Producción :

3, 76, 74, 93, 51, 65, 76, 31, 61, 97  
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - C Math