Operadores de JavaScript bit a bit (con ejemplos)

En este tutorial, aprenderá sobre los operadores bit a bit de JavaScript y sus tipos con la ayuda de ejemplos.

Operadores de JavaScript bit a bit

Los operadores bit a bit tratan sus operandos como un conjunto de dígitos binarios de 32 bits (ceros y unos) y realizan acciones. Sin embargo, el resultado se muestra como un valor decimal.

Operadores Nombre Ejemplo
& Y bit a bit x & y
| O bit a bit x | y
^ XOR bit a bit x y
~ Bit a bit NO ~x
<< Shift izquierdo x << y
>> Desplazamiento a la derecha que propaga la señal x>> y
>>> Desplazamiento a la derecha de llenado cero x>>> y

Nota : Los números enteros mínimo y máximo que se pueden representar mediante un número con signo de 32 bits son -2147483648 a 2147483647.

JavaScript Bitwise Y

Bit a bit Y &devuelve 1 si los bits correspondientes de ambos operandos son 1; de lo contrario, devuelve 0 .

Operando 1 Operando 2 Y operación
0 0 0 & 0es 0
0 1 0 & 1es 0
1 0 1 & 0es 0
1 1 1 & 1es 1

Echemos un vistazo a la operación AND bit a bit de dos enteros 12 y 25 .

 En binario, 12 = 01100 25 = 11001 // Operación Y bit a bit de 12 y 25 00001100 & 00011001 --------- 00001000 = 8 (en decimal)

Nota : La conversión de binarios de 12 a 32 bits nos da 00000000000000000000000000001100y 25 da 00000000000000000000000000011001. Sin embargo, hemos eliminado los ceros precedentes por simplicidad.

Ejemplo 1: operador AND bit a bit

 // bitwise AND operator example let a = 12; let b = 25; result = a & b; console.log(result); // 8 

En el programa anterior,

  • El valor binario de 12 es00000000000000000000000000001100
  • El valor binario de 25 es 00000000000000000000000000011001.
  • Cuando se realiza la operación AND bit a bit , el resultado binario será el 00000000000000000000000000001000que se convertirá en el valor decimal 8.

JavaScript bit a bit OR

Bit a bit OR |devuelve 1 si cualquiera de los bits correspondientes de un operando es 1; de lo contrario, devuelve 0 .

Operando 1 Operando 2 O Operación
0 0 0 | 0es 0
0 1 0 | 1es 1
1 0 1 | 0es 1
1 1 1 | 1es 1

Echemos un vistazo a la operación OR bit a bit de dos enteros 12 y 25 .

En binario, 12 = 01100 25 = 11001 // Bitwise OR Operación de 12 y 25 00001100 | 00011001 -------- 00011101 = 29 (en decimal)

Ejemplo 2: operador OR bit a bit

 // bitwise OR operator example let a = 12; let b = 25; result = a | b; console.log(result); // 29

Cuando se realiza la operación OR bit a bit , el resultado binario será el 00000000000000000000000000011101que se convertirá en el valor decimal 29.

JavaScript Bitwise XOR

Bitwise XOR ^devuelve 1 si los bits correspondientes son diferentes y devuelve 0 si los bits correspondientes son iguales.

Operando 1 Operando 2 Operación XOR
0 0 0 0es 0
0 1 0 1es 1
1 0 1 0es 1
1 1 1 1es 0
 En binario, 12 = 01100 25 = 11001 // Operación XOR bit a bit de 12 y 25 00001100 00011001 -------- 00010101 = 21 (en decimal)

Ejemplo 3: operador XOR bit a bit

 // bitwise XOR operator example let a = 12; let b = 25; result = a b; console.log(result); // 21

Cuando se realiza la operación XOR bit a bit , el resultado binario será el 00000000000000000000000000010101que se convierte en el valor decimal 21.

JavaScript Bitwise NO

Bitwise NOT ~invierte el bit ( 0 se convierte en 1 , 1 se convierte en 0 ).

 En binario, 12 = 00000000000000000000000000001100 // Bitwise No operación de 12 ~ 00000000000000000000000000001100 --------------------------------- 11111111111111111111111111110011 = -13 (en decimal)

Al convertir 11111111111111111111111111110011a decimal, el valor sería 4294967283. Pero cuando se usa el operador bit a bit, el valor se calcula en formato de complemento a 2 con signo, excepto para el desplazamiento a la derecha de relleno cero.

El complemento de 2 se calcula invirtiendo los bits (complemento de 1) y luego sumando 1 . Por ejemplo,

 13 in binary: 00000000000000000000000000001101 1's complement of 13: 11111111111111111111111111110010 2's complement of 13: 11111111111111111111111111110010 +1 --------------------------------- 11111111111111111111111111110011

Notice the 2's complement of 13 (i.e. -13) is 11111111111111111111111111110011. This value is equivalent to the bitwise NOT of 12.

Example 4: Bitwise NOT Operator

 // bitwise NOT operator example let b = 12; result = ~b; console.log(result); // -13

When bitwise NOT operation is performed, the binary result will be 11111111111111111111111111110011 which converts into the decimal value -13.

Note: Bitwise NOT of a number x gives -(x + 1). Notice above ~2 gives -3.

JavaScript Left shift

En el operador de desplazamiento a la izquierda <<, el operando de la izquierda especifica el número y el operando de la derecha especifica el número que se desplazará a la izquierda. Los bits cero se agregan a la derecha y los bits sobrantes de la izquierda se descartan.

Desplazamiento de un bit a la izquierda en JavaScript

Por ejemplo,

 let a = 8; let b = 1; result = a << b; // 1 ( 00000000000000000000000000010000 ) console.log(result);

Desplazamiento a la derecha de propagación de signos de JavaScript

En el operador de desplazamiento a la derecha >>, el primer operando especifica el número y el segundo operando especifica el número que se desplazará a la derecha. Se descartan los bits en exceso de la derecha. Las copias del bit más a la izquierda se desplazan desde la izquierda, de ahí el nombre de propagación por signo.

Desplazamiento de un bit a la derecha con signo de propagación de relleno en JavaScript

Por ejemplo,

 let a = 8; let b = 1; // 11111111111111111111111111111101 let c = -3; result = a>> b; result1 = c>> b; // 4 (00000000000000000000000000000100) console.log(result); // -1 (11111111111111111111111111111111) console.log(result1); 

Desplazamiento a la derecha de relleno cero de JavaScript

El >>>desplazamiento a la derecha de relleno cero desplaza el operando a la derecha rellenando los bits cero a la izquierda. Se descartan los bits en exceso de la derecha.

Desplazamiento de un bit a la derecha con relleno de cero en JavaScript

Por ejemplo,

 let a = 8; let b = 1; let c = -3; result = a>>> b; result1 = c>>> b; // 4 (00000000000000000000000000000100) console.log(result); // 1073741823 (00111111111111111111111111111111) console.log(result);

Articulos interesantes...