Operadores de Bit do JavaScript
- Página anterior Desestruturação JS
- Próxima página Expressões regulares JS
Operadores de Bit do JavaScript
Operador | Nome | Descrição |
---|---|---|
& | AND | Se ambos os bits forem 1, configurar cada bit como 1 |
| | OR | Se um dos dois bits for 1, configurar cada bit como 1 |
^ | XOR | Se um dos dois bits for 1, configurar cada bit como 1 |
~ | NOT | Inverter todos os bits |
<< | Deslocamento à esquerda com preenchimento por zero | Ao empurrar zero da direita para a esquerda, e desprezar o bit mais à esquerda. |
>> | Deslocamento à direita com sinal | Ao empurrar a cópia do bit mais à esquerda da esquerda para a direita, e desprezar o bit mais à direita. |
>>> | Deslocamento à direita com preenchimento por zero | Ao empurrar zero da esquerda para a direita, e desprezar o bit mais à direita. |
Exemplo
Operação | Resultado | equivalente | Resultado |
---|---|---|---|
5 & 1 | 1 | 0101 & 0001 | 0001 |
5 | 1 | 5 | 0101 | 0001 | 0101 |
5 ^ 1 | 4 | 0101 ^ 0001 | 0100 |
~ 5 | 10 | ~0101 | 1010 |
5 << 1 | 10 | 0101 << 1 | 1010 |
5 >> 1 | 2 | 0101 >> 1 | 0010 |
5 >>> 1 | 2 | 0101 >>> 1 | 0010 |
O JavaScript usa números bitwise de 32 bits
O JavaScript armazena números como números de ponto flutuante de 64 bits, mas todas as operações bitwise são executadas com números binários de 32 bits.
Antes de executar operações bitwise, o JavaScript converte números para inteiros assinados de 32 bits.
Após executar operações bitwise, o resultado será convertido de volta para um número JavaScript de 64 bits.
Os exemplos acima usam números binários de 4 bits sem sinal. Portanto, ~5 retorna 10.
Como o JavaScript usa 32 bits de inteiros assinados, o JavaScript retornará -6.
00000000000000000000000000000101 (5)
11111111111111111111111111111010 (~5 = -6)
Inteiros assinados usam o bit mais à esquerda como sinal negativo.
Operação bitwise AND
Quando operamos bitwise AND em pares de bits, se todos os bits forem 1, retornamos 1.
Exemplo unitário:
Operação | Resultado |
---|---|
0 & 0 | 0 |
0 & 1 | 0 |
1 & 0 | 0 |
1 & 1 | 1 |
Exemplo de 4 bits:
Operação | Resultado |
---|---|
1111 & 0000 | 0000 |
1111 & 0001 | 0001 |
1111 & 0010 | 0010 |
1111 & 0100 | 0100 |
Operação bitwise OR
Quando operamos bitwise OR em pares de bits, se um dos bits for 1, retornamos 1:
Exemplo unitário
Operação | Resultado |
---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Operação de 4 bits:
Operação | Resultado |
---|---|
1111 | 0000 | 1111 |
1111 | 0001 | 1111 |
1111 | 0010 | 1111 |
1111 | 0100 | 1111 |
Operação bitwise XOR
Quando operamos bitwise XOR em pares de bits, se os bits forem diferentes, retornamos 1:
Exemplo unitário:
Operação | Resultado |
---|---|
0 ^ 0 | 0 |
0 ^ 1 | 1 |
1 ^ 0 | 1 |
1 ^ 1 | 0 |
Exemplo de 4 bits:
Operação | Resultado |
---|---|
1111 ^ 0000 | 1111 |
1111 ^ 0001 | 1110 |
1111 ^ 0010 | 1101 |
1111 ^ 0100 | 1011 |
Operação bitwise AND (&) no JavaScript
Se todos os bits forem 1, a operação bitwise AND retorna 1:
Decimal | Binário |
---|---|
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 & 1 | 00000000000000000000000000000001 (1) |
Exemplo
var x = 5 & 1;
Operação de bitwise OR (|) no JavaScript
Se um dos bits for 1, a operação OR de bits retorna 1:
Decimal | Binário |
---|---|
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 | 1 | 00000000000000000000000000000101 (5) |
Exemplo
var x = 5 | 1;
Operação de bits XOR (^) no JavaScript
Se os bits forem diferentes, o XOR retorna 1:
Decimal | Binário |
---|---|
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 ^ 1 | 00000000000000000000000000000100 (4) |
Exemplo
var x = 5 ^ 1;
Operação de bits NOT (~) no JavaScript
Decimal | Binário |
---|---|
5 | 00000000000000000000000000000101 |
~5 | 11111111111111111111111111111010 (-6) |
Exemplo
var x = ~5;
Rotação esquerda (<<), operação de bits no JavaScript
Esta é a rotação esquerda com preenchimento zero. Um ou mais zeros são empurrados para a direita, e o bit mais à esquerda é removido:
Decimal | Binário |
---|---|
5 | 00000000000000000000000000000101 |
5 << 1 | 00000000000000000000000000001010 (10) |
Exemplo
var x = 5 << 1;
Rotação direita (>>), operação de bits assinada no JavaScript
Esta é a rotação direita que mantém o sinal. O bit mais à esquerda é empurrado para a esquerda, e o bit mais à direita é removido:
Decimal | Binário |
---|---|
-5 | 11111111111111111111111111111011 |
-5 >> 1 | 11111111111111111111111111111101 (-3) |
Exemplo
var x = -5 >> 1;
Rotação direita (>>>), preenchimento zero no JavaScript
Esta é a rotação direita com preenchimento zero. Um ou mais zeros são empurrados para a esquerda, e o bit mais à direita é removido:
Decimal | Binário |
---|---|
5 | 00000000000000000000000000000101 |
5 >>> 1 | 00000000000000000000000000000010 (2) |
Exemplo
var x = 5 >>> 1;
Inteiros assinados de 32 bits (número binário)
A compreensão de um inteiro de 32 bits com apenas um sinal é fácil:
Representação binária | Valor decimal |
---|---|
00000000000000000000000000000001 | 1 |
00000000000000000000000000000010 | 2 |
00000000000000000000000000000100 | 4 |
00000000000000000000000000001000 | 8 |
00000000000000000000000000010000 | 16 |
00000000000000000000000000100000 | 32 |
00000000000000000000000001000000 | 64 |
Adicionar mais dígitos revela o padrão do binário:
Representação binária | Valor decimal |
---|---|
00000000000000000000000000000101 | 5 (4 + 1) |
00000000000000000000000000101000 | 40 (32 + 8) |
00000000000000000000000000101101 | 45 (32 + 8 + 4 + 1) |
Os números negativos são o complemento binário do número positivo mais 1:
Representação binária | Valor decimal |
---|---|
00000000000000000000000000000101 | 5 |
11111111111111111111111111111011 | -5 |
00000000000000000000000000101000 | 40 |
11111111111111111111111111011000 | -40 |
11111111111111111111111111011001 | -41 |
Converter decimal para binário
Exemplo
function dec2bin(dec){ return (dec >>> 0).toString(2); }
Converter binário para decimal
Exemplo
function bin2dec(bin){ return parseInt(bin, 2).toString(10); }
- Página anterior Desestruturação JS
- Próxima página Expressões regulares JS