Analise as operações bitwise do JavaScript, exibidas a seguir. 4 & 1 7 | 2 ~ -5 9 >> 2 9 >>> 1 Os valores de cada uma dessas expressões, na ordem, são:
- A)0; 7; 5; 1; 2.
Errada, porque 7 | 2 vale 7, ~-5 vale 4 e 9 >>> 1 vale 4, nao os valores indicados.
- B)1; 9; 5; 1; 2.
Errada, porque 4 & 1 nao e 1, ~-5 nao e 5 e 9 >> 2 nao resulta em 1.
- C)0; 7; 4; 2; 4.
Certa, pois os resultados sao 0, 7, 4, 2 e 4 na ordem pedida.
- D)0; 9; 4; 0; 4.
Errada, porque 7 | 2 nao e 9 e os deslocamentos e o NOT tambem estao incorretos.
- E)1; 1; -5; 4; 2.
Errada, porque 4 & 1 nao e 1, 7 | 2 nao e 1 e ~-5 nao permanece -5.
Gabarito: C
Em JavaScript, operadores bitwise trabalham com a representacao binaria dos numeros inteiros, entao a conta acontece bit a bit. Parece coisa de máquina com cafe, mas a ideia e bem direta: o AND (&) so gera 1 quando ambos os bits sao 1; o OR (|) gera 1 quando pelo menos um bit e 1; o NOT (~) inverte os bits; e os deslocamentos movem os bits para esquerda ou direita. Na questao, 4 & 1 = 0, porque 4 em binario e 100 e 1 e 001, entao nao ha bit 1 em comum. Ja 7 | 2 = 7, porque 7 e 111 e 2 e 010, e o OR mantem 1 em qualquer posicao onde exista 1. O ~ -5, em JavaScript, usa a representacao em complemento de dois, e o resultado fica 4, pois ~x equivale a -(x+1); logo, ~(-5) = 4. Nos deslocamentos, 9 >> 2 desloca 9 dois bits para a direita: 9 e 1001, vira 0010, ou seja, 2. E 9 >>> 1 faz deslocamento sem sinal para a direita: 1001 vira 0100, isto e, 4. Esse operador preenche com zero pela esquerda, por isso o numero permanece positivo. Assim, a sequencia correta e 0; 7; 4; 2; 4, que corresponde a alternativa C. Em provas, vale lembrar da regra pratica do bitwise em JS: os operandos sao convertidos para inteiros de 32 bits, e o complemento bit a bit segue a relacao ~x = -(x+1), muito cobrada pela banca.