Conversão explicita

voltar

Vamos converter o numero do tipo LONG 130 em uma variável byte:

  1. Vamos transformar 130 em binário

    130 / 2 = 65

    Resto 0

    65 / 2 = 32

    Resto 1

    32 / 2 = 16

    Resto 0

    16 / 2 = 8

    Resto 0

    8 / 2 = 4

    Resto 0

    4 / 2 = 2

    Resto 0

    2 / 2 = 1

    Resto 0

    1 / 2 = 0

    Resto 1

    130 = 1000 0010 (leia os restos de baixo para cima) (veja: Sistema Binário)

    O número 130 leva 8 bits para ser representado conforme acima. Pórem como o literal 130 pelo java é entendido como um numero inteiro (integer) de 32 bits, então, o literal 130 na verdade é entendido assim

    0000 0000 0000 0000 0000 0000
    1000 0010

  2. To narrow the 32 bits representing 130, Java simply lops off the leftmost (higherorder) 24 bits. We’re left with just the 1000 0010 . But remember that a byte is signed, with the leftmost bit representing the sign (and not part of the value of the variable). So we end up with a negative number (the 1 that used to represent 130 now represents the negative sign bit).

    Remember, to find out the value of a negative number using two’s complement notation, you flip all of the bits and then add 1. Flipping the 8 bits gives us 111 1101, and adding 1 to that gives us 111 1110! And when we apply the sign bit, we end up with –126. (adaptado de pag 235)

    Testes:

    Ao rodar o seguinte código

    public class Test {

    public static void main (String[] args){

    long lng = 127L;

    byte b = (byte)l;

    System.out.print(b);

    }

    }

    Substituindo lng :

Binário de lng lng Sout(b) Binário de b
111 1111 127 127 111 1111
1 000 0000 128 -128
1 000 0001 129 -127
1 000 0010 130 -126 111 1110
1 000 0011 131 -125 111 1101

[…] You don’t get a runtime error, even when the value being narrowed is too large for the type. The bits to the left of the lower 8 just…go away. If the leftmost bit (the sign bit) in the byte (or any integer primitive) now happens to be a 1, the primitive will have a negative value.

(pag 233)

Veja também:

Forum java ranch http://www.coderanch.com/t/491954/Beginning-Java/java/demonstrate-convert-step-by-step que recomendou este link http://en.wikipedia.org/wiki/Two’s_complement

Conforme esta regra devemos inverter os bits e somar 1

Estudar este link para entender esta regra. Tentei ler mas não entendi ….

Esta entrada foi publicada em Java com as etiquetas . ligação permanente.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s