Calculadora Bitwise

Ejecuta operaciones bit a bit sobre enteros y consulta los resultados en decimal, hexadecimal y binario.

Introduce valores y haz clic en Calcular.

Cómo funciona

  1. Introduce dos números: entra los valores sobre los que operar, en decimal, binario (prefijo 0b) o hexadecimal (prefijo 0x).
  2. Elige la operación: selecciona AND, OR, XOR, NOT, desplazamiento izquierdo (<<) o desplazamiento derecho (>>).
  3. Consulta el resultado: la salida muestra el resultado en decimal, binario y hexadecimal a la vez, con una visualización bit a bit.

¿Por qué usar la calculadora binaria?

Las operaciones bit a bit son fundamentales en programación de sistemas, criptografía, desarrollo de juegos, gráficos, redes y sistemas embebidos. Entender cómo AND, OR, XOR y los desplazamientos manipulan los bits individuales es crucial para activar/desactivar flags, compactar datos e implementar algoritmos eficientes. Esta calculadora muestra la operación a nivel de bit para ver exactamente cómo se ve afectado cada bit.

Funcionalidades

Preguntas frecuentes

¿Para qué sirve XOR en programación?

XOR (^) sirve para invertir bits, hacer cifrado/ofuscación simple, intercambiar variables sin variable temporal, comprobar la paridad y mezclar hashes. Devuelve 1 cuando los bits difieren y 0 cuando son iguales.

¿Cuál es la diferencia entre << y >>?

El desplazamiento izquierdo (<<) mueve todos los bits a la izquierda, equivalente a una multiplicación por potencias de 2. El desplazamiento derecho (>>) mueve los bits a la derecha, equivalente a una división por potencias de 2. El desplazamiento derecho aritmético preserva el bit de signo; el desplazamiento derecho lógico rellena con ceros.

¿Cómo activar o desactivar un bit concreto?

Para activar el bit n: value |= (1 << n). Para desactivar el bit n: value &= ~(1 << n). Para invertir el bit n: value ^= (1 << n). Para comprobar si el bit n está activado: (value & (1 << n)) !== 0.

Del álgebra booleana al silicio: cómo las operaciones bit a bit se volvieron universales

Las operaciones bit a bit que cada CPU moderna implementa provienen de dos artículos fundacionales publicados con más de 80 años de diferencia. En 1854, George Boole publicó «An Investigation of the Laws of Thought», definiendo el álgebra de la lógica de dos valores, AND, OR, NOT y sus identidades. Era un trabajo filosófico, no de ingeniería. Luego en 1937, un estudiante de máster del MIT de 21 años llamado Claude Shannon escribió su tesis de máster «A Symbolic Analysis of Relay and Switching Circuits», probando que el álgebra booleana podía describir circuitos eléctricos de relés y por lo tanto que cualquier cálculo lógico podía ser implementado físicamente. Esta tesis es ampliamente citada como la tesis de máster más importante del siglo XX y es la base de toda la electrónica digital. El complemento a dos, la representación binaria para números negativos que cada CPU usa, fue patentado en 1962 por Burroughs Corporation pero ya se había usado en el IBM 704 (1954) y otras máquinas tempranas. IEEE 754 estandarizó la representación de punto flotante en 1985, fijando la disposición de bits que cada Number JavaScript todavía usa, 1 bit de signo, 11 exponente, 52 mantisa para binary64. Hoy, los operadores del lenguaje C & | ^ ~ << >> se mapean casi directamente a instrucciones de CPU únicas, razón por la cual el código bit a bit puede ser dramáticamente más rápido que el equivalente aritmético.

Los seis operadores, qué hacen a nivel de bit

Donde el bit a bit realmente gana su sueldo

Errores que muerden

Por qué complemento a dos, y qué significa a nivel de bit

Cada CPU moderna representa enteros negativos usando complemento a dos. En un byte con signo de 8 bits, los valores 0 a 127 están codificados como binario 0000_0000 a 0111_1111. Luego −1 está codificado como 1111_1111, −2 como 1111_1110, hasta −128 como 1000_0000. La razón: con esta codificación, la suma funciona de la misma manera tanto si las entradas son con signo o sin signo, el CPU no necesita instrucciones separadas add-con-signo y add-sin-signo. La asimetría es que el rango negativo es uno más grande que el positivo (en 8 bits, −128 a +127), razón por la cual Math.abs(INT_MIN) desborda en cada lenguaje con enteros de ancho fijo. Las codificaciones más antiguas signo-magnitud (un bit para el signo, resto para la magnitud) y complemento a uno existieron en los años 1950-60 pero perdieron frente al complemento a dos porque tenían dos representaciones de cero y requerían hardware de caso especial para la negación.

Más preguntas frecuentes

¿Por qué ~5 es igual a -6 en lugar de 250?

Porque en complemento a dos (la codificación que cada CPU moderna usa), voltear cada bit de un número positivo te da -n - 1. Así ~5 === -6 y ~0 === -1. En un contexto sin signo de 8 bits, el mismo patrón de bits que ~5 (binario 1111_1010) representaría 250. JavaScript trata el resultado como signo 32 bits, así que ves -6. Para obtener la interpretación sin signo: (~5) >>> 0 en 32 bits, que da 4294967290, o enmascarar a 8 bits con ~5 & 0xFF que da 250.

¿Es XOR realmente un cifrado?

XOR es el bloque de construcción de cada cifrado simétrico moderno, pero XOR solo no es cifrado seguro. Un cuaderno de uso único, XOR con una clave verdaderamente aleatoria tan larga como el mensaje, usada exactamente una vez, es teóricamente irrompible (Shannon, 1949). Reusa la clave, o usa una clave más corta que el mensaje, y el análisis de frecuencia lo rompe trivialmente. Los cifrados reales como AES usan XOR más difusión y sustitución para amplificar una clave corta en un flujo de bytes pseudo-aleatorios que parecen un cuaderno de uso único para cualquiera sin la clave. Así que «cifrar con XOR» está bien solo para ofuscación trivial, nunca para secretos reales.

¿Cuándo debo usar BigInt en lugar de Number para manipulación de bits?

Cada vez que necesites más de 32 bits de precisión bit a bit. Los operadores bit a bit JavaScript truncan operandos Number a enteros con signo de 32 bits antes de calcular. Si necesitas máscaras de 64 bits (p. ej. manipular un conjunto de banderas de características de 64 bits, trabajar con offsets mmap Linux, o implementar SHA-512), usa BigInt: 0xFFFFFFFFFFFFFFFFn & 0xFFn === 255n. BigInt es más lento que Number, ~3-10× dependiendo de la operación, así que resérvalo para los casos donde 32 bits son genuinamente muy pocos.

¿Cómo cuento el número de bits 1 en un número?

Esto es el conteo de población o peso de Hamming. La mayoría de CPU modernas tienen una sola instrucción para ello (POPCNT en x86, VCNT en ARM). En JavaScript, no hay nativo, así que usa el clásico de manipulación de bits: let c = 0; while (x) { c += x & 1; x >>>= 1; }. O el truco SWAR paralelo de Hacker's Delight: x = x - ((x >> 1) & 0x55555555); x = (x & 0x33333333) + ((x >> 2) & 0x33333333); x = (x + (x >> 4)) & 0x0F0F0F0F; return (x * 0x01010101) >>> 24;, que cuenta los bits en un entero de 32 bits en aproximadamente una docena de ciclos.

¿Se envían mis datos a algún lugar cuando uso esta calculadora?

No. Cada operación se ejecuta en el motor JavaScript de tu navegador, no ocurren llamadas de red durante un cálculo. Abre la pestaña Red en DevTools y haz clic en Calcular, verás cero solicitudes salientes. Seguro para máscaras sensibles, claves o trabajo de diseño de bits propietario.

Herramientas relacionadas

Convertidor de binario a texto Convertidor de base numérica Calculadora Chmod Generador de hash gratuito