Neste tutorial, você aprenderá sobre os operadores bit a bit JavaScript e seus tipos com a ajuda de exemplos.
Operadores JavaScript bit a bit
Os operadores bit a bit tratam seus operandos como um conjunto de dígitos binários de 32 bits (zeros e uns) e executam ações. No entanto, o resultado é mostrado como um valor decimal.
Operadores | Nome | Exemplo |
---|---|---|
& | E bit a bit | x & y |
| | OR bit a bit | x | y |
^ | XOR bit a bit | x y |
~ | NÃO bit a bit | ~x |
<< | Desvio à esquerda | x << y |
>> | Mudança à direita de propagação de sinal | x>> y |
>>> | Zero-fill turno à direita | x>>> y |
Nota : Os números inteiros mínimo e máximo que são representáveis por meio de um número assinado de 32 bits são -2147483648 a 2147483647.
JavaScript bit a bit AND
O AND bit a bit &
retorna 1 se os bits correspondentes de ambos os operandos forem 1, caso contrário, ele retorna 0 .
Operando 1 | Operando 2 | E Operação |
---|---|---|
0 | 0 | 0 & 0 é 0 |
0 | 1 | 0 & 1 é 0 |
1 | 0 | 1 & 0 é 0 |
1 | 1 | 1 & 1 é 1 |
Vamos dar uma olhada na operação AND bit a bit de dois inteiros 12 e 25 .
Em binário, 12 = 01100 25 = 11001 // Bitwise AND Operação de 12 e 25 00001100 & 00011001 --------- 00001000 = 8 (em decimal)
Nota : Converter o binário de 12 para 32 bits nos dá 00000000000000000000000000001100
e 25 dá 00000000000000000000000000011001
. No entanto, removemos os zeros anteriores para simplificar.
Exemplo 1: Operador AND bit a bit
// bitwise AND operator example let a = 12; let b = 25; result = a & b; console.log(result); // 8
No programa acima,
- O valor binário de 12 é
00000000000000000000000000001100
- O valor binário de 25 é
00000000000000000000000000011001
. - Quando a operação AND bit a bit é realizada, o resultado binário será o
00000000000000000000000000001000
que se converte no valor decimal 8.
JavaScript bit a bit OU
OR bit a bit |
retorna 1 se qualquer um dos bits correspondentes de um operando for 1, caso contrário, retorna 0 .
Operando 1 | Operando 2 | OU Operação |
---|---|---|
0 | 0 | 0 | 0 é 0 |
0 | 1 | 0 | 1 é 1 |
1 | 0 | 1 | 0 é 1 |
1 | 1 | 1 | 1 é 1 |
Vamos dar uma olhada na operação OR bit a bit de dois inteiros 12 e 25 .
Em binário, 12 = 01100 25 = 11001 // Bitwise OR Operação de 12 e 25 00001100 | 00011001 -------- 00011101 = 29 (em decimal)
Exemplo 2: Operador OR bit a bit
// bitwise OR operator example let a = 12; let b = 25; result = a | b; console.log(result); // 29
Quando a operação OR bit a bit é realizada, o resultado binário será o 00000000000000000000000000011101
que se converte no valor decimal 29.
JavaScript Bitwise XOR
O XOR bit a bit ^
retorna 1 se os bits correspondentes forem diferentes e retorna 0 se os bits correspondentes forem iguais.
Operando 1 | Operando 2 | Operação XOR |
---|---|---|
0 | 0 | 0 0 é 0 |
0 | 1 | 0 1 é 1 |
1 | 0 | 1 0 é 1 |
1 | 1 | 1 1 é 0 |
Em binário, 12 = 01100 25 = 11001 // Operação Bitwise XOR de 12 e 25 00001100 00011001 -------- 00010101 = 21 (em decimal)
Exemplo 3: Operador XOR bit a bit
// bitwise XOR operator example let a = 12; let b = 25; result = a b; console.log(result); // 21
Quando a operação XOR bit a bit é realizada, o resultado binário será o 00000000000000000000000000010101
que se converte no valor decimal 21.
JavaScript bit a bit NÃO
NOT bit a bit ~
inverte o bit ( 0 torna-se 1 , 1 torna-se 0 ).
Em binário, 12 = 00000000000000000000000000001100 // Bitwise Sem operação de 12 ~ 00000000000000000000000000001100 --------------------------------- 1111111111111111111111111111110011 = -13 (em decimal)
Durante a conversão 11111111111111111111111111110011
para decimal, o valor seria 4294967283. Mas ao usar o operador bit a bit, o valor é calculado no formato de complemento de 2 com sinal, exceto para deslocamento à direita de preenchimento zero.
O complemento de 2 é calculado invertendo os bits (complemento de 1) e, em seguida, adicionando 1 . Por exemplo,
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
No operador de deslocamento à esquerda <<
, o operando à esquerda especifica o número e o operando à direita especifica o número a ser deslocado para a esquerda. Os bits zero são adicionados à direita e os bits em excesso da esquerda são descartados.
![](https://cdn.wiki-base.com/6546206/javascript_bitwise_operators_with_examples.png.webp)
Por exemplo,
let a = 8; let b = 1; result = a << b; // 1 ( 00000000000000000000000000010000 ) console.log(result);
JavaScript Sign-propagating right shift
No operador de deslocamento à direita >>
, o primeiro operando especifica o número e o segundo operando especifica o número a ser deslocado para a direita. Os bits em excesso da direita são descartados. As cópias do bit mais à esquerda são deslocadas da esquerda, daí o nome propagação de sinal.
![](https://cdn.wiki-base.com/6546206/javascript_bitwise_operators_with_examples_2.png.webp)
Por exemplo,
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);
JavaScript Zero-fill deslocamento para a direita
O deslocamento >>>
para a direita com preenchimento de zero desloca o operando para a direita preenchendo os bits de zero à esquerda. Os bits em excesso da direita são descartados.
![](https://cdn.wiki-base.com/6546206/javascript_bitwise_operators_with_examples_3.png.webp)
Por exemplo,
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);