Simulador de Operaciones a Nivel de Bit (AND, OR, XOR, NOT, Desplazamiento)

Calcula AND, OR, XOR, NOT, desplazamiento a la izquierda y a la derecha sobre dos números, y visualiza exactamente qué bits cambiaron en una cuadrícula binaria. Compatible con anchos de 8/16/32 bits.

Consejos de uso

  • Puedes introducir valores en decimal, o usar un prefijo hexadecimal como `0x1A` o binario como `0b1010`. Pega los valores tal como los escribirías en tu código.
  • AND, OR y XOR usan dos valores, mientras que NOT solo usa uno. El número de campos de entrada cambia automáticamente según la operación elegida.
  • El desplazamiento a la derecha (`>>>`) solo admite la variante lógica. Consulta las preguntas frecuentes para saber en qué se diferencia de un desplazamiento aritmético que conserva el bit de signo.
  • Cambiar el ancho de bits de 8 a 16 y a 32 permite ver cómo el mismo número gana más ceros a la izquierda, lo cual ayuda a entender qué significa realmente el "ancho de bits".
  • Los bits resaltados en amarillo son los que cambiaron entre A y el resultado, así que con AND/OR puedes seguir visualmente qué valor de entrada "ganó" en cada posición.

Preguntas frecuentes

Sí. El desplazamiento lógico (`>>>`) siempre rellena los bits altos que quedan vacíos con 0, mientras que el aritmético (`>>`) copia en su lugar el bit de signo (el bit más significativo). Como esta herramienta trata los valores como enteros no negativos dentro del ancho de bits elegido, el signo no es realmente el punto aquí, así que solo ofrece el desplazamiento lógico, más fácil de entender.

Los operadores a nivel de bit de JavaScript calculan internamente como enteros de 32 bits con signo, por lo que aplicar NOT a un valor de 8 bits `00000001` (1) normalmente da `-2`. Esta herramienta vuelve a enmascarar el resultado al ancho de bits elegido (8/16/32), así que con 8 bits muestra correctamente `11111110` (254), la representación correcta dentro de ese ancho.

AND devuelve 1 solo cuando ambos bits son 1, por lo que se usa habitualmente para enmascarar bits específicos. OR devuelve 1 cuando alguno de los bits es 1, por lo que se usa para activar bits específicos. XOR devuelve 1 solo cuando los bits son diferentes, por lo que se usa para invertir bits o intercambiar dos valores.

El desplazamiento a la izquierda (`<<`) es una forma rápida de multiplicar por potencias de dos (duplicar, cuadruplicar, etc.), mientras que el desplazamiento a la derecha (lógico, como aquí) se usa habitualmente para dividir entre dos o para extraer un rango específico de bits de un valor. Ambos aparecen constantemente en programación competitiva y algoritmos basados en máscaras de bits.

No exactamente: están relacionados pero son términos distintos. Las operaciones a nivel de bit se refieren a las operaciones en sí (AND, OR, XOR, NOT, desplazamientos), mientras que una máscara de bits es un valor que se usa junto con una de esas operaciones (normalmente AND u OR) para leer o modificar bits específicos. Por ejemplo, `value & 0b00001111` es una máscara de bits clásica que extrae solo los 4 bits menos significativos.
ツールくん

A propósito — Las curiosas propiedades de XOR

Las operaciones a nivel de bit se corresponden directamente con los circuitos lógicos de un ordenador, lo que las convierte en algunas de las operaciones más rápidas que puede ejecutar una CPU, a menudo en un solo ciclo de reloj. Como necesitan un circuito mucho más simple que operaciones aritméticas como la multiplicación o la división, el código sensible al rendimiento (procesamiento de imágenes, criptografía, implementaciones de protocolos de red) ha usado durante mucho tiempo trucos de bits como sustituto de operaciones aritméticas más costosas.

XOR (o exclusivo) tiene un par de propiedades curiosas: aplicar XOR de un valor consigo mismo siempre da 0 (`a ^ a = 0`), y aplicar XOR con 0 devuelve el valor original sin cambios (`a ^ 0 = a`). Combinando estos dos hechos surge el clásico truco del "intercambio con XOR", que intercambia dos variables sin usar una variable temporal (`a ^= b; b ^= a; a ^= b;`). Hoy en día rara vez se recomienda en código de producción por motivos de legibilidad, pero sigue siendo un ejemplo docente favorito para entender las operaciones a nivel de bit.

Las máscaras de bits aparecen constantemente en sistemas reales. Los permisos de archivos en Unix (lectura=4, escritura=2, ejecución=1) son literalmente OR y AND a nivel de bit en acción, y extraer los componentes rojo, verde y azul de un código de color como `#FF0000` se hace con un desplazamiento a la derecha combinado con una máscara AND. La técnica de empaquetar muchos indicadores de encendido/apagado en un único entero, a menudo llamada "banderas de bits", se usó ampliamente en juegos y sistemas antiguos que necesitaban rastrear muchos estados con muy poca memoria.