- ¿Qué hace cada operación?
- AND (&): un bit es 1 solo si ambas entradas tienen 1. Se usa para enmascarar. OR (|): un bit es 1 si cualquiera de las entradas tiene 1. Se usa para activar bits. XOR (^): un bit es 1 si las entradas son distintas. Se usa para alternar bits y en sumas de verificación. NOT (~): invierte todos los bits; en enteros con signo, ~x = -x - 1. Desplazamiento a la izquierda (<<): mueve los bits a la izquierda y rellena con ceros; cada desplazamiento multiplica por 2. Desplazamiento a la derecha (>>): mueve a la derecha y rellena la izquierda con el bit de signo; cada desplazamiento divide entre 2 (redondeando hacia menos infinito). Desplazamiento sin signo a la derecha (>>>): trata el valor como un entero de 32 bits sin signo, mueve a la derecha y rellena la izquierda con ceros.
- ¿Por qué AND funciona como una máscara?
- Hacer AND con un valor que tiene 1 solo en las posiciones que quieres conservar pone a cero el resto. Para extraer el byte bajo de un valor de 32 bits, haz AND con 0xff (que en binario es 0000...0000_11111111). Los bits donde la máscara es 1 pasan sin cambios; donde es 0, se fuerzan a 0. Así se aísla un byte, se comprueba si un bit de bandera está activo o se quita el bit de signo.
- ¿Por qué NOT de un número positivo da negativo?
- Porque en la mayoría de los lenguajes los enteros se guardan en complemento a dos. El bit alto indica el signo. Al invertir todos los bits de 5 (que tiene el bit alto en 0), el resultado tiene el bit alto en 1, que se interpreta como negativo. En complemento a dos, ~x = -x - 1 exactamente. Así, ~5 = -6, ~0 = -1 y ~(-1) = 0. No hay nada mal: es simplemente cómo se codifican los enteros con signo.
- ¿Qué diferencia hay entre >> y >>>?
- >> es el desplazamiento aritmético a la derecha: mueve los bits a la derecha y rellena la izquierda con copias del bit de signo. -1 >> 1 sigue siendo -1 (todo unos, todo unos). >>> es el desplazamiento sin signo (lógico) a la derecha: rellena la izquierda con ceros en lugar del bit de signo. -1 >>> 1 pasa a ser 2147483647 (el mayor valor positivo de 32 bits). >>> solo tiene sentido sobre los 32 bits bajos, así que esta calculadora limita el desplazamiento a 31 para >>>.
- ¿Por qué BigInt en lugar de los números normales de JavaScript?
- Los operadores bit a bit normales de JavaScript truncan en silencio a 32 bits con signo. Así, 1 << 40 en JS normal da 256 (porque 40 módulo 32 es 8), no 1099511627776 como debería. BigInt no tiene ese límite: los desplazamientos y las operaciones bit a bit funcionan con enteros de precisión arbitraria. Esto importa en criptografía, empaquetado de colores, cálculo de direcciones y cualquier caso donde 32 bits no bastan. La cuadrícula sigue mostrando los 32 bits bajos, pero los resultados numéricos son el BigInt completo.
- ¿Cómo leo la cuadrícula de 32 bits?
- La cuadrícula tiene 32 celdas de izquierda (bit 31, el bit alto o de signo) a derecha (bit 0, el bit bajo). Las celdas verdes son 1 y las neutras 0. Para saber si el bit N está activo, cuenta desde la derecha empezando en 0. Las etiquetas de posición debajo de la cuadrícula (31-24, 23-16, 15-8, 7-0) marcan los límites de cada byte: útil cuando trabajas con estructuras empaquetadas, canales de color o banderas de estado.
- ¿Puedo escribir números negativos?
- Sí. Escribe un signo menos delante en cualquier base: '-5', '-0xff', '-0b1010'. En la cuadrícula de 32 bits los negativos se muestran en complemento a dos, así que -1 llena la cuadrícula de unos, -2 la llena de unos salvo el bit más bajo, y así. Los resultados numéricos en hex, binario y octal usan una representación con signo y un menos delante ('-0xff' en lugar del patrón de bits en complemento a dos), que es la convención de BigInt.toString().
- ¿Para qué sirve XOR en el mundo real?
- XOR tiene tres usos clásicos. (1) Alternar bits: XOR con una máscara invierte exactamente los bits que la máscara tiene en 1. (2) Sumas de verificación baratas: haz XOR de todos los bytes de un mensaje; el receptor hace lo mismo y compara. La paridad de RAID usa esto. (3) Cifrado tipo libreta de un solo uso: XOR del texto con una clave, y XOR del cifrado con la misma clave para recuperarlo. XOR además es su propio inverso: x ^ y ^ y = x, por eso sirve para intercambiar variables sin una temporal en código de bajo nivel.