Skip to main content

Command Palette

Search for a command to run...

JavaScript Bitwise Operations

Contenido original de W3Schools

Published
7 min readView as Markdown
JavaScript Bitwise Operations
S

Desarrollador web frontend en Frontend Club


JavaScript utiliza operandos bit a bit de 32 bits. JavaScript almacena números como números float de 64 bits, pero todas las operaciones bit a bit se realizan en 32 bits.


Operadores bit a bit de JavaScript

OperadorNombreDescripción
&ANDEstablece cada bit en 1 si ambos bits son 1.
``OREstablece cada bit en 1 si uno de los dos bits es 1.
^XOREstablece cada bit en 1 si sólo uno de dos bits es 1.
~NOTInvierte todos los bits.
<<Desplazamiento a la izquierda de relleno ceroSe desplaza hacia la izquierda empujando ceros desde la derecha y dejando que los bits más a la izquierda se caigan.
>>Desplazamiento a la derecha firmadoSe desplaza hacia la derecha empujando copias del bit más a la izquierda desde la izquierda y deja que los bits más a la derecha se caigan.
>>>Desplazamiento a la derecha de relleno ceroSe desplaza hacia la derecha empujando ceros desde la izquierda y deja que los bits más a la derecha se caigan.

Ejemplos

OperaciónResultadoIgual queResultado
5 & 110101 & 00010001
5150101
~ 510~01011010
5 << 1100101 << 11010
5 ^ 140101 ^ 00010100
5 >> 120101 >> 10010
5 >>> 120101 >>> 10010

JavaScript utiliza operandos bit a bit de 32 bits

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

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

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

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 AND

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

Ejemplo de 1 bit:

OperaciónResultado
0 & 00
0 & 10
1 & 00
1 & 11

Ejemplo de 4 bits:

OperaciónResultado
1111 & 00000000
1111 & 00010001
1111 & 00100010
1111 & 01000100

JavaScript bit a bit OR

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

Ejemplo de 1 bit:

OperaciónResultado
00
01
10
11

Ejemplo de 4 bits:

OperaciónResultado
11110000
11110001
11110010
11110100

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:

Ejemplo de 1 bit:

OperaciónResultado
0 ^ 00
0 ^ 11
1 ^ 01
1 ^ 10

Ejemplo de 4 bits:

OperaciónResultado
1111 ^ 00001111
1111 ^ 00011110
1111 ^ 00101101
1111 ^ 01001011

JavaScript bit a bit AND (&)

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

DecimalBinario
500000000000000000000000000000101
100000000000000000000000000000001
5 & 100000000000000000000000000000001 (1)

Ejemplo:

let x = 5 & 1;

Ver ejemplo


JavaScript bit a bit OR (|)

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

DecimalBinario
500000000000000000000000000000101
100000000000000000000000000000001
51

Ejemplo:

let x = 5 | 1;

Ver ejemplo


JavaScript bit a bit XOR (^)

Bit a bit XOR devuelve 1 si los bits son diferentes:

DecimalBinario
500000000000000000000000000000101
100000000000000000000000000000001
5 ^ 100000000000000000000000000000100 (4)

Ejemplo:

let x = 5 ^ 1;

Ver ejemplo


JavaScript bit a bit NOT (~)

DecimalBinario
500000000000000000000000000000101
~511111111111111111111111111111010 (-6)

Ejemplo:

let x = ~5;

Ver ejemplo


JavaScript (relleno cero) Desplazamiento bit a la 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:

DecimalBinario
500000000000000000000000000000101
5 << 100000000000000000000000000001010 (10)

Ejemplo:

let x = 5 << 1;

Ver ejemplo


JavaScript (preservación de signos) Desplazamiento a la derecha en bits (>>)

Este es un signo que preserva el desplazamiento a la derecha. Las copias del bit más a la izquierda se insertan desde la izquierda y los bits más a la derecha se caen:

DecimalBinario
-511111111111111111111111111111011
-5 >> 111111111111111111111111111111101 (-3)

Ejemplo:

let x = -5 >> 1;

Ver ejemplo


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 situados más a la derecha se caen:

DecimalBinario
500000000000000000000000000000101
5 >>> 100000000000000000000000000000010 (2)

Ejemplo:

let x = 5 >>> 1;

Ver ejemplo


Numeros binarios

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

Representación binariaValor decimal
000000000000000000000000000000011
000000000000000000000000000000102
000000000000000000000000000001004
000000000000000000000000000010008
0000000000000000000000000001000016
0000000000000000000000000010000032
0000000000000000000000000100000064

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

Representación binariaValor decimal
000000000000000000000000000001015 (4 + 1)
0000000000000000000000000000110113 (8 + 4 + 1)
0000000000000000000000000010110145 (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 NOT bit a bit del número más 1:

Representación binariaValor decimal
000000000000000000000000000001015
11111111111111111111111111111011-5
000000000000000000000000000001106
11111111111111111111111111111010-6
0000000000000000000000000010100040
11111111111111111111111111011000-40

Una pequeña broma

Solo hay 10 tipos de personas en el mundo: las que entienden binario y las que no.😄


Convertir decimal a binario

Ejemplo:

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

Ver ejemplo


Convertir binario a decimal

Ejemplo:

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

Ver ejemplo


W3Schools es el sitio de desarrolladores web más grande del mundo.

JavaScript

Part 17 of 50

JavaScript es el lenguaje de programación más popular del mundo. JavaScript es el lenguaje de programación de la Web.

Up next

JavaScript Type Conversion

Contenido original de W3Schools