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.

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.

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.


Estoy disponible para trabajar en tu proyecto o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.
Si el post fue de tu agrado muestra tu apoyo compartiéndolo, suscribiéndote al blog, siguiéndome o realizando una donación.

Suscribir por correo

Ingresa tu correo y recibirás mis últimas entradas sobre programación, open source, bases de datos y todo lo relacionado con informática

Únete a otros 4,207 suscriptores


parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

2 Comentarios

james pulido · mayo 1, 2020 a las 2:34 am

tengo una duda en este caso: 98798798798987987987987985553 en binario me da 0 LSB apagado y en el repl.it me indica que es -1 ¿Por qué?
Aún estoy aprendiendo agradecería respondieras

    parzibyte · mayo 1, 2020 a las 11:39 am

    Puede que sea un desbordamiento de búfer o algo así por el tipo de la variable

Deja un comentario

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada.

A %d blogueros les gusta esto: