Lenguaje de programación C

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

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.

/*
    Par o impar en C, pero sin
    usar divisiones ni operador módulo
 
    @author parzibyte
    Visita: parzibyte.me
*/ 
#include <stdio.h>
int main() {
  int numero;
  printf("Escribe un número:\n");
  scanf("%d", &numero);
  // Operación AND a nivel de bits
  // Esto devolverá un 1 o un 0; y recordemos que
  // un 1 se evalúa como true y un 0 como false
  int resultado = numero & 1;
  if (resultado) {
    printf("El número %d es impar", numero);
  } else {
    printf("El número %d es par", numero);
  }
}

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.

Más de C

Mira aquí más tutoriales de este lenguaje.

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/

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

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

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 semanas 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 semanas 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 semanas hace

Errores de Comlink y algunas soluciones

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

2 semanas 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…

2 semanas hace

Esta web usa cookies.