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:
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.
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.
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.
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.
Aquí dejo un replit para que pruebes el algoritmo para saber si es par o impar utilizando operaciones a nivel de bits.
Mira aquí más tutoriales de este lenguaje.
En mi blog te he enseñado a usar youtube-dl para descargar vídeos con permiso del…
Siguiendo con los tutoriales que consumen la API de los Bots de Telegram con cURL…
En un post previo te enseñé a enviar un mensaje en nombre de un Bot…
En este artículo te voy a mostrar una guía para imprimir en una impresora térmica…
La impresión de un PDF en cualquier impresora se puede automatizar con un bot de…
Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…
Esta web usa cookies.
Ver comentarios
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
Puede que sea un desbordamiento de búfer o algo así por el tipo de la variable