Tiempo/Números
Operaciones a nivel de bits
AND/OR/XOR/NAND/NOR/XNOR/NOT y desplazamientos sobre números enteros de un ancho dado (8/16/32/64 bits) en cualquier sistema numérico.
(cantidad de bits a desplazar, número decimal)
Bitwise operations work directly on a number's individual bits rather than its value as a whole — the basis for permission flags, network protocols, and low-level optimization.
How to use it
- Enter one or two numbers in any base (binary, hex, decimal) and pick an operation (AND, OR, XOR, NAND, NOR, XNOR, NOT, or a shift).
- Pick a bit width (8/16/32/64 bits) — it affects how NOT and shifts behave at the number's boundaries.
- The result is shown instantly in several number bases for easy comparison.
Common uses
- Working with permission or setting flags packed into a single number (file system access rights, for example).
- Debugging a network protocol or binary format where fields are packed at the individual-bit level.
- A teaching example for understanding binary number representation and operations on it.
Things to keep in mind
The result of NOT and shifts depends on the chosen bit width — the same number gives a different result at 8-bit versus 32-bit width because of the different number of bits involved.
XOR is often used to toggle a flag — applying XOR twice with the same value returns the original.
Artículo sobre esta herramienta: Operaciones bit a bit: cómo funcionan AND, OR y XOR a nivel de bits
Preguntas frecuentes
¿Cuál es la diferencia entre AND, OR, XOR, NAND, NOR, XNOR y NOT?
AND da 1 solo cuando ambos bits son 1, OR da 1 cuando al menos uno es 1, y XOR da 1 cuando los bits difieren. NAND/NOR/XNOR son sus negaciones, y NOT invierte cada bit de un único operando.
¿Cómo se maneja el ancho de bits y el signo de un número?
Elige un ancho de 8/16/32/64 bits — las operaciones y desplazamientos ocurren dentro de ese rango. Los números negativos se representan en complemento a dos, por lo que el resultado de NOT o un desplazamiento puede parecer inesperado si estás acostumbrado a la notación decimal.
¿Cuál es la diferencia entre un desplazamiento a la izquierda y uno a la derecha?
Un desplazamiento a la izquierda (<<) añade ceros a la derecha, multiplicando efectivamente por 2 elevado a la cantidad desplazada. Un desplazamiento a la derecha puede ser lógico (añade ceros a la izquierda) o aritmético (preserva el bit de signo) — el tipo depende del modo seleccionado.
¿Por qué una expresión como "if (a & b == c)" a menudo no funciona como se espera?
En la mayoría de los lenguajes, el operador de comparación == tiene mayor precedencia que el operador bit a bit &, así que la expresión se evalúa como "a & (b == c)" en lugar de lo que el autor suele pretender. Para evitar esta trampa, encierra siempre las operaciones a nivel de bits entre paréntesis explícitos.
¿Por qué usar banderas a nivel de bits en lugar de variables booleanas separadas?
Un conjunto de banderas empaquetadas en un único número se almacena y transmite de forma más compacta (por ejemplo, en protocolos de red o formatos de archivo), y comprobar o cambiar una bandera concreta con AND/OR/XOR es una única operación rápida.