Hoy veremos un algoritmo simple pero un poco interesante; se trata de determinar si un número es par o impar pero con algunas restricciones:

  • No se pueden usar divisiones
  • No se debe usar el operador módulo %

Es decir, no es como estábamos acostumbrados a hacerlo con:

if(numero % 2 == 0) printf("Es par");

Lo haremos en el lenguaje de programación C, pero puedes aplicarlo para otros lenguajes.

Par o impar en C con operación AND a nivel de bits

Saber si es par o impar sin divisiones ni módulo en C

Aquí aplicamos algo que no es muy popular pero sí es poderoso. Se trata de las operaciones a nivel de bits. Recordemos que todos los números decimales tienen su representación en formato binario; el cual tiene únicamente ceros y unos.

Por ejemplo, el número 1 es 1, 2 es 10, 3 es 11, 4 es 100 y así sucesivamente. Abre el conversor de números para que vayas probando conforme lees el post.

¿Cuál es la diferencia entre los pares e impares en su representación binaria? veamos una lista.

  • 50 (par) es 110010
  • 51 (impar) es 110011
  • 100 (par) es 1100100
  • 101 (impar) es 1100101

Si te fijas, los pares terminan en 0 y los impares en 1. Con esto ya tenemos una pista; pues el último bit también llamado LSB está encendido cuando es impar, y apagado cuando es par.

Hora de recordar las operaciones lógicas; sobre todo la operación AND que es aquella que dice que regresa verdadero sólo si las dos condiciones se cumplen; y nada más.

Con eso podemos hacer una operación con el número 1 y el número que vamos a comprobar. El número 1 en binario es 1, y si probamos con el 50 que es 110010 queda así:

1 AND 110010

Empieza a comparar de la derecha a la izquierda. Toma el 0 de 50 y toma el 1 del 1; al hacer 0 AND 1 el resultado es 0.

¿y qué pasa cuando es impar? tomemos ahora el 51, queda así:

1 AND 110011

Toma el 1 del 51 (no te confundas, toma el bit de la derecha) y el 1 del 1; al hacer 1 AND 1 el resultado es 1.

Por lo tanto, concluimos que:

Un número es par cuando al hacer una operación AND a nivel de bits con el 1 regresa un 0. Y es impar cuando al hacer una operación AND a nivel de bits con el 1 regresa un 1.

Aquí puedes leer una explicación más detallada y con ejemplos.

Código para saber si es par o impar en C, utilizando operaciones a nivel de bits

Basta de charlas, veamos el código.

/*
    Par o impar en C, pero sin
    usar divisiones ni operador módulo
 
    @author parzibyte
    Visita: parzibyte.me
*/
 
#include <stdio.h>
int main() {
  int numero;
  printf("Escribe un número:\n");
  scanf("%d", &numero);
  // Operación AND a nivel de bits
  // Esto devolverá un 1 o un 0; y recordemos que
  // un 1 se evalúa como true y un 0 como false
  int resultado = numero & 1;
  if (resultado) {
    printf("El número %d es impar", numero);
  } else {
    printf("El número %d es par", numero);
  }
}

Lo importante que debemos notar es la operación AND que hacemos en donde dice:

numero & 1;

Ahí usamos el operador & para operar los bits del número. Esa comparación devolverá un 1 o 0; y dependiendo de ello (mira esto sobre los booleanos en C) imprimirá el resultado.

El algoritmo funciona correctamente.

Más de C

Mira aquí más tutoriales de este lenguaje.

Si el post ha sido de tu agrado te invito a que me sigas para saber cuando haya escrito un nuevo post, haya actualizado algún sistema o publicado un nuevo software. Facebook | X | Instagram | Telegram | También estoy a tus órdenes para cualquier contratación en mi página de contacto