Pular para o conteúdo principal

Por que (byte) 157 = -99? Parte 2 de 3

Conforme dito na primeira parte deste artigo, que mostra a Conversão entre as bases binária e decimal, para entender a razão pela qual a conversão 157 para o tipo byte resulta em -99 (noventa e nove negativo), nesta segunda parte vamos tratar a representação binária de inteiros na Plataforma Java.

Representação de inteiros em Java

Em Java, não existem tipos inteiros sem sinal (unsigned) e é utilizado o complemento de dois para representar os inteiros, onde o primeiro bit (mais significativo) é utilizado para representar o sinal, sendo 0 (zero) para positivo e 1 (um) para negativo.

Para obter a representação binária dos números inteiros positivos basta pegar o valor binário 1001 1101 (no caso, 157 em decimal) e preencher os bits a esquerda com zero de acordo com o tipo da variável.

Em um post anterior sobre os Literais da Linguagem Java foi esclarecido que um literal inteiro, no caso 157, é do tipo int, então vamos preencher com zeros, inclusive o bit de sinal, conforme segue:

tipo int ocupa 4 bytes,
mais detalhes na terceira parte do artigo,
então 157 é representado como:
0 000 0000 0000 0000 0000 0000 1001 1101

Já para calcular como são representados os números inteiros negativos, realizamos o seguinte processo: cálculo da representação do número positivo em binário, inversão dos bits e a soma de um ao resultado da inversão, então:

Então para calcular a representação de -157 (cento e cinqüenta e sete negativo), devemos:

Calcular a representação de 157 (cento e cinqüenta e sete positivo) em binários:
(cálculo realizado no post anterior)
0 000 0000 0000 0000 0000 0000 1001 1101
Inverter os bits:
1 111 1111 1111 1111 1111 1111 0110 0010
Somar 1 (um) ao resultado da inversão:
1 111 1111 1111 1111 1111 1111 0110 0010 + 1 =
1 111 1111 1111 1111 1111 1111 0110 0011
E chega-se ao resultado do cálculo do complemento de dois, para -157, que é:
1 111 1111 1111 1111 1111 1111 0110 0011

Para testar se a conversão foi realizada corretamente pode ser utilizado o seguinte código:

System.out.println(Integer.toBinaryString(157));
System.out.println(Integer.toBinaryString(-157));
Exercite a conversão, realize o cálculo do complemento de dois para outros valores inteiros negativos e teste com o código apresentado acima.

Em breve postarei a terceira e última parte do artigo, na qual, trataremos da conversão (cast) de tipos primitivos, e conseguiremos entender efetivamente “Por que (byte) 157 = -99?”.

Até mais!

Marcelo de Castro
http://twitter.com/mcastroinfo
http://www.globalcode.com.br/instrutores/MarceloCastro

Comentários

Postagens mais visitadas deste blog

TDC BUSINESS, chega a São Paulo com novas trilhas de Inteligência Artificial e Inovação

Maior conferência de profissionais de tecnologia do Brasil abordará temas em alta no momento como, por exemplo, Inteligência Artificial, Segurança, Ciência de Dados e Inovação O TDC BUSINESS, a 17° edição do The Developer's Conference na cidade de São Paulo, que acontece entre os dias 19 e 21 de Setembro, reunirá profissionais e especialistas da área para troca de experiência, compartilhamento de conteúdos e networking. Com o tema central: “Tecnologia para negócios transformadores”, o evento será totalmente híbrido, ocorrendo presencialmente no espaço Pro Magno, e com transmissão simultânea e atividades de network pela internet. A expectativa é reunir mais de 14.000 pessoas, somando a participação presencial e online.   Segundo Yara Mascarenhas, Fundadora e Host do Evento, “nosso objetivo com o TDC é inspirar a colaboração entre os profissionais e empresas para construir uma nova realidade para o mercado de TI.  Vamos juntar tecnologia e negócios com as trilhas técnicas...

O que é Lógica de programação?

Este é o segundo de uma série de posts voltados aos leitores do blog que estão dando início à carreira de desenvolvimento de software. O assunto de hoje é a lógica de programação. Para ler antes: Entendendo como funciona a programação de computadores: linguagens de programação, lógica, banco de dados A lógica de programação é um pré-requisito para quem quer se tornar um desenvolvedor de software, independente da linguagem de programação que se pretende utilizar. Mas o que é de fato a Lógica de Programação e como saber se eu tenho esse pré-requisito? A lógica de programação nada mais é do que a organização coerente das instruções do programa para que seu objetivo seja alcançado. Para criar essa organização, instruções simples do programa, como mudar o valor de uma variável ou desenhar uma imagem na tela do computador, são interconectadas a estruturas lógicas que guiam o fluxo da execução do programa. Isso é muito próximo ao que usamos em nosso cotidiano para realizar atividad...

12 ESQUENTAS TDC ESPERANDO POR VOCÊ

O TDC nasceu do sonho de profissionais que valorizam o compartilhamento de conhecimento, experiências e oportunidades entre as comunidades de desenvolvedores.  Por isso, o crescimento do TDC nunca poderia ficar longe do crescimento das comunidades! Pensando nessa união, criamos um projeto quente: O ESQUENTA TDC ! Visando divulgar os meetups de comunidades que querem transformar e inspirar carreiras, foi co-criado este projeto lindo e cheio de apoio, onde o TDC abraça meetups de diversas comunidades espalhadas pelo Brasil e elas contribuem com a divulgação da edição regente.  O TDC Innovation vai rolar de 14 a 16 de JUNHO, mas até lá vão acontecer muitos encontros incríveis!  Fique por dentro das comunidades que vão participar, quais temas irão abordar e claro as datas e locais para você participar. 💥Esquentas TDC Innovation 2023: 24/05 - Esquenta TDC: Carreira e Desenvolvimento Presencial em Floripa das 19:00 as 21:30 com inscrição AQUI Comunidade: Google Developer...

Site da Globalcode: Design e integração com JSF, Facelets, RichFaces e JBossSeam

O site da Globalcode foi criado por uma agência e depois desenvolvido internamente, utilizando algumas das nossas tecnologias preferidas: - JavaServer Faces - Facelets - RichFaces - JPA - JBoss Seam (que não poderia faltar na nossa arquitetura). O site é abastecido com informações do sistema de gestão educacional, o GES ( Global Education System ). Na prática isto quer dizer que as turmas, o conteúdo dos cursos, o Orçamento Eletrônico , matrícula eletrônica em minicursos gratuitos, páginas Unidades Globalcode , tudo vem do GES. Ou seja, estes dados são alterados automaticamente quando alteramos os dados no GES e não precisa passar nas mãos de ninguém da área de TI. E o pessoal de vendas e negócios adora ficar livre do pessoal da TI. A utilização de Facelets gerou muitos benefícios e facilidades, e agora até o André Frota , que era mais designer que programador fica aflito para eliminar uma ou outra página 100% HTML, que não usa Facelets. Além dos muitos novos requisitos ...

JSON fácil em Java com GSon !

Ola pessoal ! O formato JSON ( J ava S cript O bject N otation) vem se consagrando cada vez mais na comunicação de dados, principalmente nos dispositivos móveis devido a esse formato ser mais leve que o XML e também mais legível. Uma prova disso são as inúmeras bibliotecas que existem para manipular esse formato, e no caso do Android, o suporte ao JSON é nativo. Mas apesar de ter esse suporte nativo, algumas operações devem ser feitas manualmente e o código acaba ficando um pouco verboso e repetitivo, já que para cada objeto que se deseja transmitir é necessário fazer um método que lê as propriedades do JSON e faz as devidas atribuições no seu objeto Java. Vamos supor o seguinte objeto sendo transmitido em JSON: {   user: {     id: 123456,     name: "Neto Marin",     username: "netomarin",     email: "netomarin@globalcode.com.br"   } } Se você fosse tratar um Webservice que envia esse JSON para o seu aplicativo Android...

JavaOne Brasil, dicas para submissão de palestras

Não quero parecer pretensiosa dando dicas para submissão de palestras para o JavaOne Brasil, mas sim repassar os tantos conselhos e sugestões recebidas pelos vetaranos do JavaOne: Bruno Souza e Leonardo Galvão que revisaram dezenas de submissões para o JavaOne e ajudaram a aprovar tantas palestras, e também misturar um pouco da minha experiência na seleção de palestras nos eventos realizados pela Globalcode e SouJava . 10 anos de JavaOne: http://www.globalcode.com.br/noticias/Globalcode10AnosNoJavaOne Os palestrantes ganham a entrada! A submissão pode ser feita em português! O passo mais importante para ser aprovado como palestrante no JavaOne é sem dúvida nenhuma submeter pelo menos uma palestra. Então, independente de qualquer coisa, participe, arrisque, divulgue.  Mas, se quiser aumentar as suas chances...   1) Leve a sério: peça para amigos fazerem uma leitura crítica do texto, e claro uma boa revisão ortográfica. 2) Submissão de várias palestras ou variações do ...