Observe os dois comandos de atribuição do JavaScript. let X = -100; X <<= 5; Assinale o valor de X após a execução desses comandos.
- A)0
Errada, porque o deslocamento à esquerda não zera o valor; ele multiplica por 32, mantendo o sinal.
- B)3
Errada, pois 3 não tem relação com a operação de deslocamento mostrada no enunciado.
- C)-100
Errada, porque X é alterado pelo operador <<= e não permanece com o valor inicial.
- D)-200
Errada, pois deslocar 5 bits à esquerda equivale a multiplicar por 32, então -100 não vira -200.
- E)-3200
Certa, porque -100 deslocado 5 bits à esquerda resulta em -100 x 32 = -3200.
Gabarito: E
Em JavaScript, os operadores de deslocamento bit a bit não fazem uma multiplicação comum: eles atuam sobre a representação binária do número. No caso de X <<= 5, o valor de X é deslocado 5 bits para a esquerda, o que equivale, na prática, a multiplicar por 2^5, isto é, por 32. Como X vale -100, o resultado vira -100 x 32 = -3200. Vale lembrar que, em operações bit a bit, o JavaScript converte o número para inteiro de 32 bits com sinal. Isso é o que permite esse comportamento “de computador raiz”, bem diferente de uma simples conta aritmética escrita no quadro. O sinal negativo continua lá, então o deslocamento preserva o negativo e amplia o valor absoluto. Por isso, após a execução de let X = -100; e depois X <<= 5;, o valor final de X é -3200. É exatamente esse o gabarito da questão. Em provas, sempre desconfie quando aparecer operador de deslocamento: a banca gosta de testar se você sabe que ele não é soma nem concatenação, mas operação bit a bit.