JavaScript bit a bit


Tabla de contenido

    Mostrar tabla de contenidos


Operadores bit a bit de JavaScript

&

Lógica Y. Establece cada bit en 1 si ambos bits son 1

|

Lógica O. Establece cada bit en 1 si uno de los dos bits es 1

^

XOR lógico. Establece cada bit en 1 si solo uno de dos bits es 1

~

Lógica NO. Invierte todos los bits

<<

Desplazamiento a la izquierda con relleno cero. Se desplaza hacia la izquierda empujando ceros desde la derecha y dejando que los bits más a la izquierda caigan

>>

Desplazamiento a la derecha firmado. Se desplaza hacia la derecha empujando copias del bit más a la izquierda desde la izquierda y dejando que los bits más a la derecha caerse

>>>

Desplazamiento a la derecha de relleno cero. Se desplaza hacia la derecha empujando ceros desde la izquierda y deja que los bits más a la derecha caigan

Ejemplos

Operation Result Same as Result
5 & 1 1 0101 & 0001  0001
5 | 1 5 0101 | 0001  0101
~ 5 10  ~0101  1010
5 << 1 10 0101 << 1  1010
5 ^ 1 4 0101 ^ 0001  0100
5 >> 1 2 0101 >> 1  0010
5 >>> 1 2 0101 >>> 1  0010

JavaScript utiliza operandos bit a bit de 32 bits

JavaScript almacena números como números de punto flotante de 64 bits, pero todo bit a bit Las operaciones se realizan en números binarios de 32 bits.

Antes de realizar una operación bit a bit, JavaScript convierte números a 32 bits enteros con signo.

Una vez realizada la operación bit a bit, el resultado se vuelve a convertir a JavaScript de 64 bits. números.

Los ejemplos anteriores utilizan números binarios sin signo de 4 bits. Por esta razón ~ 5 devuelve 10.

Dado que JavaScript utiliza enteros con signo de 32 bits, no devolverá 10. Devolverá -6.

00000000000000000000000000000101 (5)

11111111111111111111111111111010 (~5=-6)

Un entero con signo utiliza el bit más a la izquierda como signo menos.



JavaScript bit a bit Y

Cuando se realiza un AND bit a bit en un par de bits, devuelve 1 si ambos bits son 1.

0 & 0

0

0 & 1

0

1 & 0

0

1 & 1

1

1111 & 0000

0000

1111 & 0001

0001

1111 & 0010

0010

1111 & 0100

0100


JavaScript bit a bit O

Cuando se realiza un OR bit a bit en un par de bits, devuelve 1 si uno de los bits es 1:

0 | 0

0

0 | 1

1 | 0

1

1 | 1

1

1111 | 0000

1111

1111 | 0001

1111

1111 | 0010

1111

1111 | 0100

1111


JavaScript bit a bit XOR

Cuando se realiza un XOR bit a bit en un par de bits, devuelve 1 si los bits son diferentes:

0 ^ 0

0

0 ^ 1

1 ^ 0

1

1 ^ 1

1111 ^ 0000

1111

1111 ^ 0001

1110

1111 ^ 0010

1101

1111 ^ 0100

1011


JavaScript bit a bit Y (&)

Bit a bit AND devuelve 1 solo si ambos bits son 1:

5

00000000000000000000000000000101

1

00000000000000000000000000000001

5 & 1

000000000000000000000000000000001 (1)

Ejemplo

let x = 5 & 1;

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Bitwise AND</h1>
<h2>The &amp; Operator</h2>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = 5 & 1;
</script>

</body>
</html> 

JavaScript bit a bit O (|)

Bit a bit OR devuelve 1 si uno de los bits es 1:

5

00000000000000000000000000000101

1

00000000000000000000000000000001

5 | 1

00000000000000000000000000000101 (5)

Ejemplo

let x = 5 | 1;

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Bitwise OR</h1>
<h2>The | Operator</h2>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = 5 | 1;
</script>

</body>
</html>

JavaScript XOR bit a bit (^)

Bitwise XOR devuelve 1 si los bits son diferentes:

5

00000000000000000000000000000101

1

00000000000000000000000000000001

5 ^ 1

00000000000000000000000000000100 (4)

Ejemplo

let x = 5 ^ 1;

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Bitwise XOR</h1>
<h2>The ^ Operator</h2>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = 5 ^ 1;
</script>

</body>
</html>

JavaScript bit a bit NO (~)

5

00000000000000000000000000000101

~5

11111111111111111111111111111010 (-6)

Ejemplo

let x = ~5;

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Bitwise NOT</h1>
<h2>The ~ Operator</h2>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = ~ 5;
</script>

</body>
</html>

JavaScript (relleno cero) Desplazamiento bit a izquierda (<<)

Este es un desplazamiento a la izquierda con relleno cero. Uno o más bits cero se introducen desde la derecha, y los bits más a la izquierda se caen:

5

00000000000000000000000000000101

5 << 1

00000000000000000000000000001010 (10)

Ejemplo

let x = 5 << 1;

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Bitwise Left</h1>
<h2>The &lt;&lt; Operator</h2>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = 5 << 1;
</script>

</body>
</html>

JavaScript (preservación de signos) Desplazamiento bit a derecha (>>)

Esta es una señal que preserva el desplazamiento a la derecha. Se envían copias del bit más a la izquierda. desde la izquierda, y los bits más a la derecha caen:

-5

11111111111111111111111111111011

-5 >> 1

11111111111111111111111111111101 (-3)

Ejemplo

let x = -5 >> 1;

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Signed Bitwise Right</h1>
<h2>The &gt;&gt; Operator</h2>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = -5 >> 1;
</script>

</body>
</html>

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

Este es un desplazamiento a la derecha de relleno cero. Uno o más bits cero se introducen desde la izquierda, y los bits de la derecha se caen:

5

00000000000000000000000000000101

5 >>> 1

00000000000000000000000000000010 (2)

Ejemplo

let x = 5 >>> 1;

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Unsigned Bitwise Right</h1>
<h2>The &gt;&gt;&gt; Operator</h2>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = 5 >>> 1;
</script>

</body>
</html>

Numeros binarios

Los números binarios con un solo bit configurado son fáciles de entender:

00000000000000000000000000000001

1

00000000000000000000000000000010

2

00000000000000000000000000000100

4

00000000000000000000000000001000

8

00000000000000000000000000010000

16

00000000000000000000000000100000

32

00000000000000000000000001000000

64

Configurar algunos bits más revela el patrón binario:

00000000000000000000000000000101

5 (4+1)

00000000000000000000000000001101

13 (8+4+1)

00000000000000000000000000101101

45 (32+8+4+1)

Los números binarios de JavaScript se almacenan en formato complemento a dos.

Esto significa que un número negativo es el NO bit a bit del número más 1:

00000000000000000000000000000101

5

11111111111111111111111111111011

-5

00000000000000000000000000000110

6

11111111111111111111111111111010

-6

00000000000000000000000000101000

40

11111111111111111111111111011000

-40

Broma :

Sólo hay 10 tipos de personas en el mundo: las que entienden el sistema binario y las que no.


Convertir decimal a binario

Ejemplo

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

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Convert Decimal to Binary</h1>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = dec2bin(-5);
function dec2bin(dec){
  return (dec >>> 0).toString(2);
}
</script>

</body>
</html>

Convertir binario a decimal

Ejemplo

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

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Convert Binary to Decimal</h2>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = bin2dec(101);
function bin2dec(bin){
  return parseInt(bin, 2).toString(10);
}
</script>

</body>
</html>