Tutorial de JS

JS HOME Introdução JS JS Para onde Saída JS Declarações JS Sintaxe JS Comentários JS Variáveis ​​JS JS Let JS Const Operadores JS JS Aritmética Atribuição de JS Tipos de dados JS Funções JS Objetos JS Eventos JS Strings JS Métodos de string JS Pesquisa de String JS Modelos de String JS Números JS Métodos de número JS Matrizes JS Métodos de matriz JS Classificação de matriz JS Iteração de matriz JS Const da matriz JS Datas JS Formatos de data JS Métodos de obtenção de data JS Métodos de conjunto de datas JS JS Math JS Aleatório JS Booleanos Comparações JS Condições JS Interruptor JS Circuito JS para JS Loop Para Entrada JS Loop Para De JS Loop Enquanto Quebra de JS Iteráveis ​​JS Conjuntos JS Mapas JS Tipo JS de Conversão de tipo JS JS bit a bit JS RegExp Erros JS Escopo JS Içamento JS Modo estrito JS JS esta palavra-chave Função de seta JS Classes JS JS JSON Depuração JS Guia de estilo JS Práticas recomendadas de JS Erros de JS Desempenho JS Palavras reservadas JS

Versões JS

Versões JS JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE / Edge Histórico de JS

Objetos JS

Definições de objeto Propriedades do objeto Métodos de objeto Exibição de objetos Acessadores de objetos Construtores de objetos Protótipos de Objetos Iteráveis ​​de objeto Conjuntos de objetos Mapas de objetos Referência do objeto

Funções JS

Definições de função Parâmetros de função Invocação de função Chamada de Função Função Aplicar Fechamentos de Função

Classes JS

Introdução à aula Herança de classe Classe Estática

JS Assíncrono

Retornos de chamada JS JS Assíncrono Promessas JS JS Async/Aguardar

JS HTML DOM

Introdução ao DOM Métodos DOM Documento DOM Elementos DOM HTML DOM Formulários DOM CSS DOM Animações DOM Eventos DOM Ouvinte de eventos DOM Navegação DOM Nós DOM Coleções DOM Listas de nós DOM

BOM do navegador JS

Janela JS Tela JS Localização JS Histórico de JS Navegador JS Alerta pop-up JS Temporização JS Cookies JS

APIs da Web JS

Introdução à API da Web API de formulários da Web API de histórico da web API de armazenamento da Web API do trabalhador da Web API de busca da Web API de geolocalização da Web

JS AJAX

Introdução AJAX AJAX XML Http Solicitação AJAX Resposta AJAX Arquivo XML AJAX PHP AJAX ASP AJAX Banco de dados AJAX Aplicativos AJAX Exemplos AJAX

JS JSON

Introdução JSON Sintaxe JSON JSON x XML Tipos de dados JSON Análise JSON JSON Stringify Objetos JSON Matrizes JSON Servidor JSON JSON PHP HTML JSON JSON JSONP

JS x jQuery

Seletores jQuery HTML jQuery jQuery CSS jQuery DOM

Gráficos JS

Gráficos JS Tela JS JS Plotly JS Chart.js JS Google Chart JS D3.js

Exemplos JS

Exemplos JS JS HTML DOM Entrada HTML JS Objetos HTML JS Eventos HTML JS Navegador JS Editor JS Exercícios JS Teste JS Certificado JS

Referências JS

Objetos JavaScript Objetos HTML DOM


Operações bit a bit JavaScript


Operadores Bitwise JavaScript

Operator Name Description
& AND Sets each bit to 1 if both bits are 1
| OR Sets each bit to 1 if one of two bits is 1
^ XOR Sets each bit to 1 if only one of two bits is 1
~ NOT Inverts all the bits
<< Zero fill left shift Shifts left by pushing zeros in from the right and let the leftmost bits fall off
>> Signed right shift Shifts right by pushing copies of the leftmost bit in from the left, and let the rightmost bits fall off
>>> Zero fill right shift Shifts right by pushing zeros in from the left, and let the rightmost bits fall off

Exemplos

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 usa operandos bit a bit de 32 bits

JavaScript armazena números como números de ponto flutuante de 64 bits, mas todas as operações bit a bit são executadas em números binários de 32 bits.

Antes que uma operação bit a bit seja executada, o JavaScript converte números em inteiros com sinal de 32 bits.

Depois que a operação bit a bit é executada, o resultado é convertido novamente em números JavaScript de 64 bits.

Os exemplos acima usam números binários sem sinal de 4 bits. Por causa disso ~ 5 retorna 10.

Como o JavaScript usa inteiros assinados de 32 bits, ele não retornará 10. Ele retornará -6.

00000000000000000000000000000101 (5)

1111111111111111111111111111010 (~5 = -6)

Um inteiro com sinal usa o bit mais à esquerda como sinal de menos.



E bit a bit

Quando um AND bit a bit é executado em um par de bits, ele retorna 1 se ambos os bits forem 1.

Exemplo de um bit:
OperaçãoResultado
0 e 00
0 e 10
1 e 00
1 e 11
Exemplo de 4 bits:
OperaçãoResultado
1111 e 00000000
1111 e 00010001
1111 e 00100010
1111 e 01000100

OU bit a bit

Quando um OR bit a bit é executado em um par de bits, ele retorna 1 se um dos bits for 1:

Exemplo de um bit:
OperaçãoResultado
0 | 00
0 | 1
1 | 01
1 | 11
Exemplo de 4 bits:
OperaçãoResultado
1111 | 00001111
1111 | 00011111
1111 | 00101111
1111 | 01001111

XOR bit a bit

Quando um XOR bit a bit é executado em um par de bits, ele retorna 1 se os bits forem diferentes:

Exemplo de um bit:
OperaçãoResultado
0^00
0^1
1^01
1^1
Exemplo de 4 bits:
OperaçãoResultado
1111 ^ 00001111
1111^00011110
1111^00101101
1111^01001011

JavaScript bit a bit AND (&)

Bitwise AND retorna 1 somente se ambos os bits forem 1:

DecimalBinário
500000000000000000000000000000101
100000000000000000000000000000001
5 e 100000000000000000000000000000001 (1)

Exemplo

let x = 5 & 1;

JavaScript bit a bit OU (|)

O OR bit a bit retorna 1 se um dos bits for 1:

DecimalBinário
500000000000000000000000000000101
100000000000000000000000000000001
5 | 100000000000000000000000000000101 (5)

Exemplo

let x = 5 | 1;

XOR bit a bit JavaScript (^)

Bitwise XOR retorna 1 se os bits forem diferentes:

DecimalBinário
500000000000000000000000000000101
100000000000000000000000000000001
5^100000000000000000000000000000100 (4)

Exemplo

let x = 5 ^ 1;

JavaScript bit a bit NÃO (~)

DecimalBinário
500000000000000000000000000000101
~51111111111111111111111111111010 (-6)

Exemplo

let x = ~5;

JavaScript (preenchimento zero) Deslocamento à esquerda bit a bit (<<)

Este é um deslocamento à esquerda de preenchimento zero. Um ou mais bits zero são inseridos da direita e os bits mais à esquerda caem:

DecimalBinário
500000000000000000000000000000101
5 << 100000000000000000000000000001010 (10)

Exemplo

let x = 5 << 1;

JavaScript (preservação de sinal) Deslocamento à direita bit a bit (>>)

Este é um sinal que preserva o deslocamento à direita. As cópias do bit mais à esquerda são empurradas da esquerda e os bits mais à direita caem:

DecimalBinário
-51111111111111111111111111111011
-5 >> 11111111111111111111111111111101 (-3)

Exemplo

let x = -5 >> 1;

Deslocamento direito JavaScript (preenchimento zero) (>>>)

Este é um deslocamento à direita de preenchimento zero. Um ou mais bits zero são inseridos da esquerda e os bits mais à direita caem:

DecimalBinário
500000000000000000000000000000101
5 >>> 100000000000000000000000000000010 (2)

Exemplo

let x = 5 >>> 1;

Números binários

Números binários com apenas um conjunto de bits são fáceis de entender:

Representação BináriaValor decimal
000000000000000000000000000000011
000000000000000000000000000000102
000000000000000000000000000001004
000000000000000000000000000010008
0000000000000000000000000001000016
0000000000000000000000000010000032
0000000000000000000000000100000064

Definir mais alguns bits revela o padrão binário:

Representação BináriaValor decimal
000000000000000000000000000001015 (4 + 1)
0000000000000000000000000000110113 (8 + 4 + 1)
0000000000000000000000000010110145 (32 + 8 + 4 + 1)

Os números binários do JavaScript são armazenados no formato de complemento de dois.

Isso significa que um número negativo é o NOT bit a bit do número mais 1:

Representação BináriaValor decimal
000000000000000000000000000001015
1111111111111111111111111111011-5
000000000000000000000000000001106
1111111111111111111111111111010-6
0000000000000000000000000010100040
1111111111111111111111111011000-40

Convertendo Decimal para Binário

Exemplo

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

Convertendo Binário para Decimal

Exemplo

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