Operadores de bits de JavaScript

Operadores de bits de JavaScript

Operador Nombre Descripción
& AND Establecer cada bit en 1 si ambos son 1
| OR Establecer cada bit en 1 si uno de los dos es 1
^ XOR Establecer cada bit en 1 si solo uno de los dos es 1
~ NOT Invertir todos los bits
<< Desplazamiento a la izquierda con relleno de ceros Al desplazarse a la izquierda introduciendo ceros desde la derecha y eliminando el bit más a la izquierda.
>> Desplazamiento a la derecha con signo Al desplazarse a la derecha introduciendo una copia del bit más a la izquierda y eliminando el bit más a la derecha.
>>> Desplazamiento a la derecha con relleno de ceros Al desplazarse a la derecha introduciendo ceros desde la izquierda y eliminando el bit más a la derecha.

Ejemplo

Operación Resultado es equivalente Resultado
5 & 1 1 0101 & 0001 0001
5 | 1 5 0101 | 0001 0101
5 ^ 1 4 0101 ^ 0001 0100
~ 5 10 ~0101 1010
5 << 1 10 0101 << 1 1010
5 >> 1 2 0101 >> 1 0010
5 >>> 1 2 0101 >>> 1 0010

JavaScript utiliza números de bits de 32 bits

JavaScript almacena los números como números de coma flotante de 64 bits, pero todas las operaciones de bits se realizan con números binarios de 32 bits.

Antes de realizar la operación de bits, JavaScript convierte los números en enteros signados de 32 bits.

Después de realizar la operación de bits, el resultado se convierte nuevamente en un número de JavaScript de 64 bits.

El ejemplo anterior utiliza números binarios sin signo de 4 bits. Por lo tanto, ~ 5 devuelve 10.

Dado que JavaScript utiliza enteros signados de 32 bits, JavaScript devuelve -6.

00000000000000000000000000000101 (5)

11111111111111111111111111111010 (~5 = -6)

Los enteros signados utilizan el bit más a la izquierda como signo negativo.

Operación de bits AND

Cuando se realiza una operación de bits AND entre un par de dígitos, si todos los dígitos son 1, devuelve 1.

Ejemplo de unidad:

Operación Resultado
0 & 0 0
0 & 1 0
1 & 0 0
1 & 1 1

Ejemplo de 4 bits:

Operación Resultado
1111 & 0000 0000
1111 & 0001 0001
1111 & 0010 0010
1111 & 0100 0100

Operación de bits OR

Cuando se realiza una operación de bits OR entre un par de dígitos, si uno de ellos es 1, devuelve 1:

Ejemplo de unidad

Operación Resultado
0 | 0 0
0 | 1 1
1 | 0 1
1 | 1 1

Operación de 4 bits:

Operación Resultado
1111 | 0000 1111
1111 | 0001 1111
1111 | 0010 1111
1111 | 0100 1111

Operación de bits XOR

Cuando se realiza una operación de bits XOR entre un par de dígitos, si los dígitos son diferentes, devuelve 1:

Ejemplo de unidad:

Operación Resultado
0 ^ 0 0
0 ^ 1 1
1 ^ 0 1
1 ^ 1 0

Ejemplo de 4 bits:

Operación Resultado
1111 ^ 0000 1111
1111 ^ 0001 1110
1111 ^ 0010 1101
1111 ^ 0100 1011

Operación de bits AND (&) en JavaScript

Si todos los bits son 1, la operación de bits AND devuelve 1:

Decimal Binario
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 & 1 00000000000000000000000000000001 (1)

Ejemplo

var x = 5 & 1;

Prueba por su cuenta

Operación de bits OR (|) en JavaScript

Si uno de los bits es 1, la operación OR de bits devuelve 1:

Decimal Binario
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 | 1 00000000000000000000000000000101 (5)

Ejemplo

var x = 5 | 1;

Prueba por su cuenta

Operación XOR (^) de bits en JavaScript

Si los bits son diferentes, XOR devuelve 1:

Decimal Binario
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 ^ 1 00000000000000000000000000000100 (4)

Ejemplo

var x = 5 ^ 1;

Prueba por su cuenta

Operación NOT (~) de bits en JavaScript

Decimal Binario
5 00000000000000000000000000000101
~5 11111111111111111111111111111010 (-6)

Ejemplo

var x = ~5;

Prueba por su cuenta

Desplazamiento a la izquierda (<<)(relleno cero) en operaciones de bits de JavaScript

Esto es un desplazamiento a la izquierda con relleno cero. Un o más bits cero se introducen desde la derecha, y el bit más a la izquierda se elimina:

Decimal Binario
5 00000000000000000000000000000101
5 << 1 00000000000000000000000000001010 (10)

Ejemplo

var x = 5 << 1;

Prueba por su cuenta

Desplazamiento a la derecha (>>)(con signo) en operaciones de bits de JavaScript

Esto es un desplazamiento a la derecha que mantiene el signo. El bit más a la izquierda se introduce desde la izquierda, y el bit más a la derecha se elimina:

Decimal Binario
-5 11111111111111111111111111111011
-5 >> 1 11111111111111111111111111111101 (-3)

Ejemplo

var x = -5 >> 1;

Prueba por su cuenta

Desplazamiento a la derecha (>>>)(relleno cero) en JavaScript

Esto es un desplazamiento a la derecha con relleno cero. Un o más bits cero se introducen desde la izquierda, y el bit más a la derecha se elimina:

Decimal Binario
5 00000000000000000000000000000101
5 >>> 1 00000000000000000000000000000010 (2)

Ejemplo

var x = 5 >>> 1;

Prueba por su cuenta

Entero de 32 bits con signo (número binario)

La comprensión de un entero de 32 bits con un solo bit establecido es muy sencilla:

Representación binaria Valor decimal
00000000000000000000000000000001 1
00000000000000000000000000000010 2
00000000000000000000000000000100 4
00000000000000000000000000001000 8
00000000000000000000000000010000 16
00000000000000000000000000100000 32
00000000000000000000000001000000 64

Añadir más位数揭示了二进制的模式:

Representación binaria Valor decimal
00000000000000000000000000000101 5 (4 + 1)
00000000000000000000000000101000 40 (32 + 8)
00000000000000000000000000101101 45 (32 + 8 + 4 + 1)

Los números negativos son el complemento binario de los números positivos más 1:

Representación binaria Valor decimal
00000000000000000000000000000101 5
11111111111111111111111111111011 -5
00000000000000000000000000101000 40
11111111111111111111111111011000 -40
11111111111111111111111111011001 -41

Convertir de decimal a binario

Ejemplo

function dec2bin(dec){
    return (dec >>> 0).toString(2);
}

Prueba por su cuenta

Convertir de binario a decimal

Ejemplo

function bin2dec(bin){
    return parseInt(bin, 2).toString(10);
}

Prueba por su cuenta