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 & 0 es 0 |
0 | 1 | 0 & 1 es 0 |
1 | 0 | 1 & 0 es 0 |
1 | 1 | 1 & 1 es 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 00000000000000000000000000001100
y 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 es
00000000000000000000000000001100
- El valor binario de 25 es
00000000000000000000000000011001
. - Cuando se realiza la operación AND bit a bit , el resultado binario será el
00000000000000000000000000001000
que 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 | 0 es 0 |
0 | 1 | 0 | 1 es 1 |
1 | 0 | 1 | 0 es 1 |
1 | 1 | 1 | 1 es 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 00000000000000000000000000011101
que 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 0 es 0 |
0 | 1 | 0 1 es 1 |
1 | 0 | 1 0 es 1 |
1 | 1 | 1 1 es 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 00000000000000000000000000010101
que 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 11111111111111111111111111110011
a 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.
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.
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.
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);