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.

instagram viewer

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:

  1. La operación AND se aplica a cada par de bits correspondientes en a y b de derecha a izquierda.
  2. Si ambos bits son 1, el resultado es 1. Si cualquiera de los bits es 0, el resultado es 0.
  3. 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; // 01100100

dejar 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; // 01100100

dejar 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; // 01100100

dejar 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, 01, 10, 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.