PCF-3

Questões comentadas, artigos e notícias

Java Puzzle [#3] – Multicast

Posted by p3r1t0cr1m1n4l em 15/02/2009

Os casts em Java são usados para converter um valor de um tipo para outro tipo. O que o programa abaixo imprime?

public class Multicast {
  public static void main(String[] args) {
    System.out.println((int) (char) (byte) -1);
  }
}

Resposta:

O resultado é 65535.

O Java utiliza complemento de dois, e o inteiro -1 é representado pelos 32 bits setados em 1:

11111111 11111111 11111111 11111111

Ao converter para byte que é signed, sem problemas: ele deixa apenas o último byte e retira os demais valores 1’s mais significativos, ainda representando -1:

11111111

A pegadinha ocorre porém na transformação de byte (signed) para char (unsigned – não dá para representar negativos), cujo resultado são 16 bits, todos setados em 1:

11111111 11111111 = 2^16 = 65535.

A transformação para int ocorre também sem problemas, apenas acrescentando zeros nos 16 bits que faltavam para completar os 32 bits:

00000000 00000000 11111111 11111111 = 65535 (resultado final)

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

 
%d blogueiros gostam disto: