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í:

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:

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:

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

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.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

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.

Dejar un comentario