Table of contents
- Operadores bit a bit de JavaScript
- Ejemplos
- JavaScript utiliza operandos bit a bit de 32 bits
- JavaScript bit a bit AND
- JavaScript bit a bit OR
- JavaScript bit a bit XOR
- JavaScript bit a bit AND (&)
- JavaScript bit a bit OR (|)
- JavaScript bit a bit XOR (^)
- JavaScript bit a bit NOT (~)
- JavaScript (relleno cero) Desplazamiento bit a la izquierda (<<)
- JavaScript (preservación de signos) Desplazamiento a la derecha en bits (>>)
- JavaScript (relleno cero) Desplazamiento a la derecha (>>>)
- Numeros binarios
- Convertir decimal a binario
- Convertir binario a decimal
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
Operador | Nombre | Descripción | |
& | AND | Establece cada bit en 1 si ambos bits son 1. | |
` | ` | OR | Establece cada bit en 1 si uno de los dos bits es 1. |
^ | XOR | Establece cada bit en 1 si sólo uno de dos bits es 1. | |
~ | NOT | Invierte todos los bits. | |
<< | Desplazamiento a la izquierda de relleno cero | Se 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 firmado | Se 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 cero | Se desplaza hacia la derecha empujando ceros desde la izquierda y deja que los bits más a la derecha se caigan. |
Ejemplos
Operación | Resultado | Igual que | Resultado |
5 & 1 | 1 | 0101 & 0001 | 0001 |
5 | 1 | 5 | 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 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ó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 |
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ón | Resultado |
0 | 0 |
0 | 1 |
1 | 0 |
1 | 1 |
Ejemplo de 4 bits:
Operación | Resultado |
1111 | 0000 |
1111 | 0001 |
1111 | 0010 |
1111 | 0100 |
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ó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 |
JavaScript bit a bit AND (&)
Bit a bit AND
devuelve 1 solo si ambos bits son 1:
Decimal | Binario |
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 & 1 | 00000000000000000000000000000001 (1) |
Ejemplo:
let x = 5 & 1;
JavaScript bit a bit OR (|)
Bit a bit OR
devuelve 1 si uno de los bits es 1:
Decimal | Binario |
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 | 1 |
Ejemplo:
let x = 5 | 1;
JavaScript bit a bit XOR (^)
Bit a bit XOR
devuelve 1 si los bits son diferentes:
Decimal | Binario |
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 ^ 1 | 00000000000000000000000000000100 (4) |
Ejemplo:
let x = 5 ^ 1;
JavaScript bit a bit NOT (~)
Decimal | Binario |
5 | 00000000000000000000000000000101 |
~5 | 11111111111111111111111111111010 (-6) |
Ejemplo:
let x = ~5;
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:
Decimal | Binario |
5 | 00000000000000000000000000000101 |
5 << 1 | 00000000000000000000000000001010 (10) |
Ejemplo:
let x = 5 << 1;
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:
Decimal | Binario |
-5 | 11111111111111111111111111111011 |
-5 >> 1 | 11111111111111111111111111111101 (-3) |
Ejemplo:
let x = -5 >> 1;
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:
Decimal | Binario |
5 | 00000000000000000000000000000101 |
5 >>> 1 | 00000000000000000000000000000010 (2) |
Ejemplo:
let x = 5 >>> 1;
Numeros binarios
Los números binarios con un solo bit configurado son fáciles de entender:
Representación binaria | Valor decimal |
00000000000000000000000000000001 | 1 |
00000000000000000000000000000010 | 2 |
00000000000000000000000000000100 | 4 |
00000000000000000000000000001000 | 8 |
00000000000000000000000000010000 | 16 |
00000000000000000000000000100000 | 32 |
00000000000000000000000001000000 | 64 |
Configurar algunos bits más revela el patrón binario:
Representación binaria | Valor decimal |
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 NOT bit a bit del número más 1:
Representación binaria | Valor decimal |
00000000000000000000000000000101 | 5 |
11111111111111111111111111111011 | -5 |
00000000000000000000000000000110 | 6 |
11111111111111111111111111111010 | -6 |
00000000000000000000000000101000 | 40 |
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);
}
Convertir binario a decimal
Ejemplo:
function bin2dec(bin){
return parseInt(bin, 2).toString(10);
}
W3Schools es el sitio de desarrolladores web más grande del mundo.