Introdução aos operadores de bit a bit em JavaScript

Os operadores Bitwise em JavaScript agem em seu operando, operando neles na forma de representação de número binário (Base 2) (em particular na forma de números de 32 bits), em vez de no número decimal (Base 10), números octais (Base 8) ou notação de número hexadecimal (Base 16). Por exemplo, 1010 é a representação binária do número decimal dez. As operações bit a bit em JavaScript são executadas nos operandos dos operadores em suas representações binárias, mas a saída é sempre retornada no formulário de valor numérico padrão.

Um operador bit a bit em JavaScript converte seus operandos na forma complementar de 2 da forma inteira assinada de 32 bits. Portanto, sempre que um operador trabalha com um número inteiro, o valor derivado é a forma de complemento 2 desse número inteiro. O complemento 2 de um número inteiro é o complemento 1 do número (isto é, bit a bit, não do número) mais 1.

Por exemplo, a seguir está a representação de 32 bits do número 7

00000000000000000000000000000111

O abaixo é 1 'complemento ie ~ 7

11111111111111111111111111111000

A seguir, a forma do complemento de 2, que é igual a -7

11111111111111111111111111111001

Operador bit a bitUsoSignificado
AND bit a bitx & yRetornará 1 em cada posição de bit se ambos os bits correspondentes forem 1, caso contrário, 0.
OR bit a bitx yRetornará 1 em cada posição de bit, se algum dos bits correspondentes for 1, caso contrário, 0.
Bitwise XORx yRetornará 0 em cada posição de bit se os bits correspondentes forem 1 ou 0, caso contrário, 1 sempre que os bits forem diferentes.
Bitwise NOT~ xVirará os bits do operando x de 1 para 0 e vice-versa.
Desvio à esquerdax << yDeslocará os bits para a esquerda no número binário x por y bits enquanto pressiona 0 no lugar da direita.
Sinal propagando turno certox >> yDeslocará os bits para a direita no número binário x por y bits enquanto copia os bits mais à esquerda para a esquerda para completar 32 bits.
Zero deslocamento para a direitax >>> yDeslocará os bits para a direita no número binário x por y bits enquanto pressiona 0 no lugar da esquerda.

Operadores lógicos bit a bit em JavaScript

Os operadores lógicos bit a bit consistem em todos os operadores lógicos usados ​​na maioria dos idiomas, mas são diferentes de maneira que os operadores lógicos bit a bit operam pouco a pouco. A seguir, são operadores lógicos bit a bit usados ​​em JavaScript:

1. AND bit a bit

Este é um operador binário indicado pelo símbolo do "e" comercial "&", que executa uma operação AND no par consecutivo de bits correspondentes de seus argumentos. O operador "&" retornaria 1 somente se ambos os bits 1 estiverem retornando 0. Portanto, também podemos correlacionar a operação AND com a multiplicação, porque ambos darão a mesma resposta.

XYX e Y
0 00 00 0
0 01 10 0
1 10 00 0
1 11 11 1

Exemplo

10 (base 10) = 000000000000000000000000000000001010
13 (base 10) = 000000000000000000000000000000001101

-------------------

10 e 13 00000000000000000000000000001001000 = 8 (base 10)

2. OR bit a bit

Este é um operador binário indicado pelo símbolo de uma barra vertical “|” que executa uma operação OR no par consecutivo de bits correspondentes de seus argumentos. O operador "|" retornará 1 se um dos bits for 1 ou ambos forem 1, caso contrário, retornará 0. O Bitwise OR "|" é diferente do OR lógico "||", pois funciona pouco a pouco.

XYX Y
0 00 00 0
0 01 11 1
1 10 01 1
1 11 11 1

Exemplo

10 (base 10) = 000000000000000000000000000000001010
13 (base 10) = 000000000000000000000000000000001101

-------------------

10 13 00000000000000000000000000001111 = 15 (base 10)

3. XOR bit a bit

Este é um operador binário indicado pelo símbolo do sinal de intercalação “^” que executa uma operação XOR no par consecutivo de bits correspondentes de seus argumentos. O operador “^” retornaria 0 se ambos os bits forem iguais (ou seja, ambos são 1 ou ambos são 0), caso contrário, retornará 1.

XYX Y
0 00 00 0
0 01 11 1
1 10 01 1
1 11 10 0

Exemplo

10 (base 10) = 000000000000000000000000000000001010
13 (base 10) = 000000000000000000000000000000001101

-------------------

10 13 00000000000000000000000000000111 = 7 (base 10)

4. Bitwise NÃO

Este é um operador unário, indicado pelo símbolo do til “~”, que executa uma operação NOT nos bits correspondentes de seu argumento. O operador “~” inverteria os bits do operando, ou seja, converteria 0 em 1 ou 1 em 0.

X~ X
0 01 1
1 10 0

Exemplo

10 (base 10) = 000000000000000000000000000000001010

-------------------

~ 10 11111111111111111111111111110101

Operadores de deslocamento bit a bit em JavaScript

No deslocamento bit a bit, a operação também recebe dois argumentos, onde o primeiro argumento é o número binário no qual a operação shift será realizada e o segundo argumento especifica o número de bits pelos quais o primeiro argumento deve ser deslocado. O Operador em uso especifica a direção da operação de turno no número binário.

1. Deslocamento à esquerda bit a bit

Este é um operador binário indicado pelo símbolo "<<". Esse operador deslocará os bits mais à direita do primeiro argumento para a esquerda pelo valor dos tempos do segundo argumento. Os bits deslocados da direita são substituídos por 0 na parte mais à direita de cada operação de mudança realizada.

Exemplo: 8 << 3 produz 64

8 (base 10) = 000000000000000000000000000000001000

-------------------

8 << 3 00000000000000000000000001000000 = 64 (base 10)

2. Deslocamento à direita bit a bit

Este é um operador binário indicado pelo símbolo ">>>". Esse operador deslocará os bits mais à direita do primeiro argumento para a direita pelo valor dos tempos do segundo argumento. Os bits deslocados da esquerda são substituídos por 0 na parte mais à esquerda de cada operação de mudança realizada.

Exemplo: 8 >>> 3 produz 1

8 (base 10) = 000000000000000000000000000000001000

-------------------

8 >>> 3 00000000000000000000000000000001 = 1 (base 10)

-8 (base 10) = 11111111111111111111111111111000

-------------------

-8 >>> 3 00011111111111111111111111111111 = 536870911 (base 10)

3. Sinal bit a bit propagando a mudança para a direita

Este é um operador binário indicado pelo símbolo ">>". Esse operador deslocará os bits mais à direita do primeiro argumento para a direita pelo valor dos tempos do segundo argumento. Os bits deslocados da esquerda são substituídos pelo bit mais à esquerda (ou seja, bit de sinal) na parte mais à esquerda para cada operação de mudança realizada.

Exemplo: 8 >>> 3 produz 1

8 (base 10) = 000000000000000000000000000000001000

-------------------

8 >> 3 00000000000000000000000000000001 = 1 (base 10)

-8 (base 10) = 11111111111111111111111111111000

-------------------

-8 >> 3 11111111111111111111111111111111 = -1 (base 10)

Conclusão

Os argumentos são convertidos em números binários de 32 bits e expressos na forma de bits (ou seja, 0 e 1). Os números nos argumentos que resultam em mais de 32 bits são descartados (ms bits mais significativos). A mesma regra se aplica quando, durante a operação de troca, se a troca de bits para a esquerda for descartada, os bits extras em msb e durante a troca para a direita, o bit extra que cresce na parte mais à direita é descartado.

Antes: 110011010100011101001000100000001110010010001

-------------------

Depois: 11101001000100000001110010010001

Cada bit correspondente é emparelhado, isto é, o primeiro bit com o primeiro bit de outros argumentos, o segundo bit com o segundo bit e assim por diante.

O operador está sendo aplicado a cada bit (para o operador binário deve ser um par de bits), portanto chamados de operadores bit a bit em JavaScript.

Aplicação prática do operador bit a bit são sinalizadores de bit, comunicação por soquete / portas, compactação, criptografia, máquinas de estado finito, gráficos, etc.

Artigos recomendados

Este é um guia para operadores de bit a bit em JavaScript. Aqui discutimos a introdução, tipos de operadores bit a bit em JavaScript, como operadores lógicos e shift, juntamente com suas operações. Você também pode consultar os seguintes artigos para saber mais:

  1. Compiladores JavaScript
  2. Inverter em JavaScript
  3. For Loop em JavaScript
  4. Introdução ao JavaScript