Categorías: Algoritmos

Número par con operación AND a nivel de bits

Sin importar el lenguaje de programación, cuando se requiere saber si un número es par o impar sin el operador de módulo, usamos la operación AND & a nivel de bits y comparamos el resultado con 0.

En este post te voy a explicar cómo es que funciona y por qué es confiable.

Explicación

Vamos a hacer un AND de los números usando el operador &, a nivel binario. Recuerda que AND devuelve 1 (o verdadero, true, etcétera) solo si los dos bits son 1, y 0 en cualquier otro caso.

Solo como recordatorio:

  • 0 AND 0 es 0
  • 0 AND 1 es 0
  • 1 AND 0 es 0
  • 1 AND 1 es 1

Entonces vamos a hacer la operación AND del número que vamos a probar, junto con el número 1. Así:

número & 1

Y luego vamos a comparar si el resultado de la operación es 0. En caso de que sea 0, el número es par. Ahora te explicaré la razón.

Ejemplo con números

Vamos con el número 4 que sabemos es par, y en binario es:

100

Fíjate en que su bit final (el que, si lo convertimos a decimal, valdría 1) está en 0.

Si el número es par, va a tener el último bit en 0. Si no, en 1.

Nota: aquí me refiero a “último bit” como el LSB, y no me estoy metiendo con cosas de big endian y little endian.

Cuando hacemos un AND entre el 4 y el 1 la operación binaria queda así:

100
001
___
000

Así que el resultado es 0. Si ahora probamos con el número 5 que tiene el LSB en 1 y en binario es:

101

Al hacer la operación AND:

101
001
___
001

El resultado es 1. Como es 1, se dice que no es par. Y efectivamente, el número 5 no es par.

Otros ejemplos

Hasta ahora lo hicimos con números pequeños, pero no importa cuál número sea, ya que solo nos importa el último bit. Aquí un ejemplo con la cifra de un millón que sabemos sí es par:

11110100001001000000
00000000000000000001
____________________
00000000000000000000

Aquí otro con el número FFFFFF que es 16777215, mismo que es impar:

111111111111111111111111
000000000000000000000001
________________________
000000000000000000000001

Y así podemos hacer para varios números. Lo bueno es que no tenemos que convertirlos a binario, pues con el solo hecho de usar el operador & ya se está haciendo la operación a nivel binario.

Recuerda que ya he implementado esto en C y Python, aunque se puede hacer en cualquier otro lenguaje que soporte esas operaciones.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
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/

Entradas recientes

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

3 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

3 días hace

Solución: Apache – Server unable to read htaccess file

Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…

3 días hace

Esta web usa cookies.