A motivação para escrever este artigo foi responder a seguinte pergunta:
Por que
Porém, para entender o motivo pelo qual a conversão 157 para o tipo byte resulta em -99 (noventa e nove negativo), antes precisamos entender três pontos:
Conversão entre as bases binária e decimal
Para converter um número decimal para binário, realizamos sucessivas divisões por 2 (base) até que o resultado da divisão seja 0 (zero) e utilizamos os restos para compor o binário. O resto da primeira divisão representa o dígito de menor significância e o resto da última divisão representa o dígito de maior significância, conforme exemplo:
Então, 157 em decimal é equivalente a 1001 1101 em binário
Para realizar a conversão inversa, ou seja, de decimal para binário, deve ser realizada a soma do resultado da multiplicação do dígito por 2 (base) elevado a posição do dígito. Vamos exemplificar convertendo o número 1001 1101 em decimal.
Exercite a conversão, realize o cálculo da representação na base 2 (binária) de outros valores, como: 4, 63 e 1024. Realize ainda, a conversão dos valores binários: 1000 e 1111 para decimal e observe os resultados obtidos.
Em breve postarei a próxima parte do artigo.
Até mais!
Marcelo de Castro
http://blog.castro.eti.br
http://twitter.com/mcastroinfo
http://www.globalcode.com.br/instrutores/MarceloCastro
Por que
(byte) 157 = -99
?Porém, para entender o motivo pelo qual a conversão 157 para o tipo byte resulta em -99 (noventa e nove negativo), antes precisamos entender três pontos:
- Conversão entre as bases binária e decimal
- Representação binária de inteiros na Plataforma Java (parte 2)
- Conversão (cast) de tipos primitivos (parte 3)
Conversão entre as bases binária e decimal
Para converter um número decimal para binário, realizamos sucessivas divisões por 2 (base) até que o resultado da divisão seja 0 (zero) e utilizamos os restos para compor o binário. O resto da primeira divisão representa o dígito de menor significância e o resto da última divisão representa o dígito de maior significância, conforme exemplo:
157/2 = 78 resto 1 // posição 0
78/2 = 39 resto 0 // posição 1
39/2 = 19 resto 1 // posição 2
19/2 = 9 resto 1 // posição 3
9/2 = 4 resto 1 // posição 4
4/2 = 2 resto 0 // posição 5
2/2 = 1 resto 0 // posição 6
1/2 = 0 resto 1 // posição 7
Então, 157 em decimal é equivalente a 1001 1101 em binário
Para realizar a conversão inversa, ou seja, de decimal para binário, deve ser realizada a soma do resultado da multiplicação do dígito por 2 (base) elevado a posição do dígito. Vamos exemplificar convertendo o número 1001 1101 em decimal.
1 x 27 = 128
0 x 26 = 0
0 x 25 = 0
1 x 24 = 16
1 x 23 = 8
1 x 22 = 4
0 x 21 = 0
1 x 20 = 1
128 + 0 + 0 + 16 + 8 + 4 + 0 + 1 = 157
Exercite a conversão, realize o cálculo da representação na base 2 (binária) de outros valores, como: 4, 63 e 1024. Realize ainda, a conversão dos valores binários: 1000 e 1111 para decimal e observe os resultados obtidos.
Em breve postarei a próxima parte do artigo.
Até mais!
Marcelo de Castro
http://blog.castro.eti.br
http://twitter.com/mcastroinfo
http://www.globalcode.com.br/instrutores/MarceloCastro
Comentários