SóProvas


ID
748129
Banca
CESGRANRIO
Órgão
Petrobras
Ano
2012
Provas
Disciplina
Programação
Assuntos

Seja o seguinte trecho de código Java, onde o operador >> representa um shift à direita:
public static void main(String[] args) {
      int x=(short)0xffff9c;
 
      x=x>>2;
      System.out.printf(“%d”,x);
   }
}

O que será exibido no console quando for executado o método main( )?

Alternativas
Comentários
  • F = 1111 F = 1111 F = 1111 F = 1111 F = 1111 9 = 1001 C = 1100: 
    0xffff9c equivale a 111111111111111110011100,   porém quando aplica o cast do short completamos os bits mais significativos com '1' para termos um número de 32 bits (short) negativo ainda, se completar com '0' temos um número positivo totalmente diferente. 

    completando com '1' temos: 11111111111111111111111110011100 =  -100  no complemento a dois.
    deslocando para direita dois bits temos(x>>2): 11111111111111111111111111100111 = -25 (LETRA C)
  • Na verdade o short aloca 16 bits. Como 0xffff9c possui 24 bits, os 8 bits a esquerda são eliminados, ficando com ff9c = 1111 1111 1001 1100. Fazendo complemento de 2, esse número é igual a -100, que é atribuido ao int (32bits, ok). Fazer shift a direita significa dividir o número por 2^n, onde n é a quantidade de bits deslocados. Então temos que o resultado é  -100/2^2 = -25.
  • A forma sugerida pelo Vítor no último comentário é mais rápida.   Mas achei interessante descrever uma outra forma de resolver a questão, mais trabalhosa, mas também correta:   1-Converter para binário.   2-Descartar os bits que excedem 16 bits do Short. Fica: 1111 1111 1001 1100   3-Como o número é negativo, recalcular os bits em complemento a 2.Fica: 0000 0000 0110 0100   4-Andar 2 bits para a direita. Fica 0000 0000 0001 1001 = 25. Lembrar que o número é negativo = -25
  • Apenas corrigindo o complemento a 2 do Carlos Roberto, que fica 0000 0000 0110 0100 = 100