O que são Operadores Bitwise e Como Eles Funcionam?

Operadores bit a bit em JavaScript são operadores especiais que funcionam nas representações binárias dos números. Para entender os operadores bit a bit, primeiro precisamos compreender o conceito de bits e números binários. Em computação, um bit é a unidade mais básica de informação. Pode ter apenas dois valores: 0 ou 1. Binário é um sistema numérico que usa apenas esses dois dígitos para representar todos os números. Por exemplo, a representação binária do número decimal 10 é 1010. Neste sistema, cada dígito representa uma potência de 2, começando pelo dígito mais à direita e aumentando conforme avançamos para a esquerda. <table> <tr> <td>1</td> <td>0</td> <td>1</td> <td>0</td> </tr> <tr> <td role="math" aria-label="1 times 2 to the power of 3">1 · 2<sup>3</sup></td> <td role="math" aria-label="0 times 2 to the power of 2">0 · 2<sup>2</sup></td> <td role="math" aria-label="1 times 2 to the power of 1">1 · 2<sup>1</sup></td> <td role="math" aria-label="0 times 2 to the power of 0">0 · 2<sup>0</sup></td> </tr> <tr> <td>8</td> <td>0</td> <td>2</td> <td>0</td> </tr> <table> Na tabela acima, a primeira linha mostra o número binário 1010, a segunda linha mostra a potência de 2 representada por cada posição binária e a terceira linha mostra o resultado de cada multiplicação. Se você somar todos os valores na terceira linha, eles totalizam 10. Agora, vamos mergulhar nos operadores bit a bit. Esses operadores realizam operações nas representações binárias dos números. JavaScript fornece vários operadores bit a bit, incluindo AND (&), OR (|), XOR (^), NOT (~), deslocamento à esquerda (<<) e deslocamento à direita (>>). O operador bitwise AND (&) retorna um 1 em cada posição de bit para a qual os bits correspondentes de ambos os operandos são 1. Aqui está um exemplo:
let a = 5;  // Binary: 101
let b = 3;  // Binary: 011
console.log(a & b);  // 1 (Binary: 001)
Neste exemplo, realizamos uma operação AND bit a bit em 5 (101 em binário) e 3 (011 em binário). O resultado é 1 (001 em binário) porque somente o bit mais à direita é 1 em ambos os números. O operador bit a bit OR (|) retorna um 1 em cada posição de bit para a qual os bits correspondentes de um ou ambos os operandos são 1. Por exemplo:
let a = 5;  // Binary: 101
let b = 3;  // Binary: 011
console.log(a | b);  // 7 (Binary: 111)
Aqui, o resultado é 7 (111 em binário) porque pelo menos um dos bits é 1` em cada posição. O operador bit a bit XOR (^) retorna um 1 em cada posição de bit para a qual os bits correspondentes de um dos operandos, mas não de ambos, são 1. Por exemplo:
let a = 5;  // Binary: 101
let b = 3;  // Binary: 011
console.log(a ^ b);  // 6 (Binary: 110)
O resultado é 6 (110 em binário) porque o primeiro e o segundo bits da direita são diferentes nos dois números. O operador bitwise NOT (~) inverte todos os bits do seu operando. Por exemplo:
let a = 5;  // Binary: 101
console.log(~a);  // -6
Isso pode parecer surpreendente, mas é por causa de como números negativos são representados em binário usando o complemento de dois. O operador de deslocamento à esquerda (<<) desloca todos os bits para a esquerda por um número especificado de posições. Por exemplo:
let a = 5;  // Binary: 101
console.log(a << 1);  // 10 (Binary: 1010)
Aqui, todos os bits são deslocados uma posição para a esquerda, multiplicando efetivamente o número por 2. O operador de deslocamento à direita (>>) desloca todos os bits para a direita. Por exemplo:
let a = 5;  // Binary: 101
console.log(a >> 1);  // 2 (Binary: 10)
Aqui, todos os bits são deslocados uma posição para a direita, dividindo efetivamente o número por 2 e arredondando para baixo. Operadores bit a bit são frequentemente usados em programação de baixo nível e criptografia. Embora eles possam não ser tão comumente usados na programação diária em JavaScript, entendê-los pode ser benéfico para certas tarefas especializadas e pode aprofundar seu entendimento de como os computadores funcionam em um nível fundamental.
Este módulo não possui perguntas. Marque como concluído.