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.

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

Common uses

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.

Artículos: Tiempo/Números

Tiempo Unix: por qué las computadoras cuentan el tiempo desde 1970

Por qué el 1 de enero de 1970 se convirtió en el punto de referencia del tiempo para la mayoría de los sistemas informáticos.

Expresiones cron: cómo descifrar un horario de tareas

Cómo descifrar una expresión como */15 * * * * y saber exactamente cuándo se ejecutará la tarea.

Sistemas numéricos: para qué sirven el binario, el octal y el hexadecimal

Por qué el color #FF5733 en CSS se escribe con dígitos hexadecimales en lugar de decimales.

Diferencia entre fechas: por qué contar días es más complicado de lo que parece

Por qué restar fechas de forma ingenua puede dar un resultado incorrecto por culpa de los años bisiestos.

Cálculo de edad: por qué no es una simple resta de años

Por qué restar simplemente los años de nacimiento puede dar una edad un año mayor que la real.

Zonas horarias: por qué UTC no es lo mismo que GMT

Por qué UTC nunca cambia dos veces al año, mientras que la hora de Londres (GMT/BST) sí lo hace.

Calculadora de duración: cómo sumar correctamente horas, minutos y segundos

Por qué al sumar minutos y segundos hay que "llevar" el resto a la siguiente posición, igual que en la suma decimal.

ISO 8601 Duration: cómo escribir una duración en formato estándar

Por qué PT1H30M significa «1 hora 30 minutos» y no «1 minuto 30 horas».

Número de semana: por qué en distintos países las semanas se cuentan diferente

Por qué el 1 de enero a veces pertenece a la semana 52 o 53 del año anterior según el estándar ISO 8601.

Números romanos: cómo funciona un sistema sin cero ni posiciones

Por qué IV significa 4 y no 6, y cómo funciona la regla de resta en los números romanos.

IEEE 754: por qué 0.1 + 0.2 no es igual a 0.3 en el código

Por qué en casi todos los lenguajes de programación 0.1 + 0.2 muestra 0.30000000000000004.

Número en letras: para qué convertir cifras en palabras

Por qué en los documentos bancarios la cantidad se escribe a la vez en cifras y en letras.