Número par o impar sin usar divisiones ni operador módulo en C

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

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.

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

Basta de charlas, veamos el código.

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.

Probar en línea

Aquí dejo un replit para que pruebes el algoritmo para saber si es par o impar utilizando operaciones a nivel de bits.

Más de C

Mira aquí más tutoriales de este lenguaje.