Los operadores bit a bit son cómodos de usar y pueden generar un código increíblemente rápido. Descubre cuáles son y cómo usarlos.
Los operadores bit a bit son aquellos que actúan a nivel binario. Suelen ser muy rápidos de ejecutar y normalmente actúan sobre dos operandos.
Puede usar operadores bit a bit para manipular números binarios, optimizar código, comprimir datos e implementar técnicas para gráficos o programación de juegos. Como la mayoría de los otros lenguajes de programación, JavaScript tiene un excelente soporte para operaciones bit a bit.
¿Qué son los operadores?
La mayoría de los lenguajes de programación utilizan el concepto de "operador", un símbolo que le dice al intérprete que realice una operación matemática, relacional o lógica específica.
Hay muchos diferentes tipos de operadores de JavaScript debe tener en cuenta, desde los que parecen operadores matemáticos estándar, como "+", hasta los operadores que comparan dos valores. Los operadores bit a bit son un conjunto especial que se ocupa de los números binarios.
Operador AND (&) bit a bit
El AND bit a bit de JavaScript (&) el operador compara los bits correspondientes de dos operandos binarios: números que contienen solo 0 y 1. Para cada par de bits de entrada, el bit de salida correspondiente es "1" si ambos bits de entrada son "1" o "0" en caso contrario.
Esta es la sintaxis del operador AND bit a bit:
a & b
En este ejemplo, a y b son los operandos en los que está realizando la operación bit a bit.
Así es como funciona el operador AND bit a bit:
- La operación AND se aplica a cada par de bits correspondientes en a y b de derecha a izquierda.
- Si ambos bits son 1, el resultado es 1. Si cualquiera de los bits es 0, el resultado es 0.
- El resultado es un nuevo número donde cada bit representa el resultado de la operación AND en los bits correspondientes de a y b.
Por ejemplo:
dejar un = 50; // 00110010
dejar segundo = 100; // 01100100dejar resultado = a & b; // 00100000
consola.log (resultado); // 32
En el ejemplo anterior, a es 50 en decimal, equivalente al número binario 00110010, y b es 100 en decimal, equivalente al número binario 01100100. El operador AND compara cada par de bits correspondientes de derecha a izquierda y produce el número binario resultante 00100000, que es 32 en decimal.
Operador OR bit a bit (|)
El OR bit a bit (|El operador ) compara los bits correspondientes de dos operandos y devuelve "1" si uno o ambos bits son "1" y "0" si ambos bits son "0".
Esta es la sintaxis del operador OR bit a bit:
un | b
Dónde a y b son los operandos de la operación.
El operador OR bit a bit (|) funciona de la misma manera que el operador AND bit a bit. La única diferencia es que el operador OR devuelve "1" si "cualquiera" de los bits es "1" y "0" si "ambos" bits son "0".
Por ejemplo:
dejar un = 50; // 00110010
dejar segundo = 100; // 01100100dejar resultado = un | b; // 01110110
consola.log (resultado); // 118
En el ejemplo anterior, el operador OR bit a bit compara cada par de bits de derecha a izquierda (es decir, 0 | 0 = 0, 0 | 1 = 1, 1 | 1 = 1, etcétera). El número binario resultante es 01110110, que es 118 en decimal.
Operador bit a bit XOR (^)
El XOR bit a bit (^El operador ) compara los bits correspondientes de dos operandos y devuelve "1" si alguno de los operandos, pero no ambos, es "1" y "0" si ambos operandos son "1" o "0".
Esta es la sintaxis del operador XOR bit a bit:
un ^ segundo
Dónde a y b son los operandos de la operación.
El operador bit a bit XOR funciona de la misma manera que los operadores bit a bit OR y AND. La única diferencia es que devuelve "1" si "cualquiera pero no ambos" de los operandos es "1" y "0" si "ambos" operandos son "1" o "0".
Por ejemplo:
dejar un = 50; // 00110010
dejar segundo = 100; // 01100100dejar resultado = a ^ b; // 01010110
consola.log (resultado); // 86
En el ejemplo anterior, el operador XOR compara cada par de bits de derecha a izquierda (es decir, 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 1 = 0, etcétera). El número binario resultante es 01010110, que es 86 en decimal.
Operador bit a bit NO (~)
El bit a bit NO (~) es un operador unario que opera en un solo entero invirtiendo todos sus bits. En otras palabras, cambia cada bit "0" a "1" y cada bit "1" a "0".
Esta es la sintaxis del operador NOT bit a bit:
~ c
Dónde C es el operando.
El operador NOT bit a bit funciona invirtiendo todos los bits de un operando, incluidos los bits de signo.
Por ejemplo:
dejar c = 10; // 00001010
dejar re = -10; // 11110110
consola.registro(~c); // 11110101
consola.registro(~d); // 00001001
En el ejemplo anterior, el operador NOT invierte todos los bits (es decir, 0 → 1, 1 → 0, etc.), incluidos los bits de signo.
Operador de desplazamiento a la izquierda (<
El operador de desplazamiento a la izquierda desplaza los bits de un número dado a la izquierda. El operador toma dos operandos: el número a desplazar y el número de bits por los que desplazarlo.
Aquí está la sintaxis para el operador de desplazamiento a la izquierda:
un << b
Dónde a es el operando para el operador de desplazamiento a la izquierda, y b es el número de bits por el que el operador desplazará el operando.
El operador de desplazamiento a la izquierda funciona desplazando cada bit de un operando hacia la izquierda el número especificado de posiciones y descartando el exceso de bits desplazados hacia la izquierda.
Por ejemplo:
dejar un = 50; // 00110010
dejar segundo = 2;dejar resultado = a << b; // 11001000
consola.log (resultado); // 200
En el ejemplo anterior, el operador de desplazamiento a la izquierda desplazó el decimal 50 del binario 00110010 en dos lugares. El valor binario resultante es 11001000, que es 200 como decimal.
Operador de desplazamiento a la derecha de propagación de signos (>>)
El desplazamiento a la derecha de propagación de signos (>>) desplaza los bits de un número a la derecha conservando el signo del número original. El operador toma dos operandos: el número a desplazar y el número de bits por los que desplazarlo.
Aquí está la sintaxis para el operador de desplazamiento a la derecha de propagación de signos:
un >> segundo
Dónde a es el operando para el operador de desplazamiento a la derecha, y b es el número de bits por el que el operador desplazará el operando.
El operador de desplazamiento a la derecha que propaga señales funciona de manera similar al operador de desplazamiento a la izquierda; la única diferencia en el modo de operación es que el desplazamiento a la derecha mantiene el signo.
Por ejemplo:
dejar un = -50; // 11001110
dejar segundo = 2;dejar resultado = a >> b; // 11110011
consola.log (resultado); // -13
En el ejemplo anterior, el operador de desplazamiento a la derecha desplazó el decimal -50 (11001110) dos espacios a la derecha, lo que resultó en el decimal -13 (11110011).
Operador de desplazamiento a la derecha sin signo (>>>)
El desplazamiento a la derecha sin firmar (>>>El operador ) desplaza los bits de un número a la derecha en un número específico de posiciones y llena los espacios vacíos a la izquierda con ceros. El operador descarta los bits sobrantes que desplaza hacia la derecha.
Aquí está la sintaxis para el operador de desplazamiento a la derecha sin firmar:
un >>> segundo
Dónde a es el operando para el operador de desplazamiento a la derecha, y b es el número de bits por el que el operador desplazará el operando.
El operador de turno a la derecha sin firmar funciona de manera similar al turno a la derecha. Sin embargo, a diferencia del operador de desplazamiento a la derecha (>>), no conserva el signo de un número cuando se desplaza. En cambio, trata el número como un entero sin signo y llena el bit más a la izquierda con un cero.
Por ejemplo:
dejar un = -5; // 11111111 11111111 11111111 11111011
dejar segundo = 2;dejar resultado = a >>> b; // 00111111 11111111 11111111 11111110
consola.log (resultado); // 1073741822
En este ejemplo, el operador de desplazamiento a la derecha sin signo desplazó "-5" dos espacios a la derecha, eliminando efectivamente el signo y dando como resultado el decimal "1073741822".
Las aplicaciones de los operadores bit a bit
Mediante la manipulación de bits individuales en números binarios, los operadores bit a bit pueden crear una funcionalidad compleja que, de otro modo, sería difícil o imposible de lograr con las operaciones aritméticas tradicionales.
Comprender cómo usar operadores bit a bit puede ayudarlo a crear aplicaciones web más eficientes y con mejor rendimiento.