dúvida com bits no cast de tipos primitivos

Boa noite,
tenho uma dúvida quando ao código abaixo:

o resultado disto é -128, tendo como base que o byte vai até 127, e no no livro da Katy Sierra, que “para descobrir o valor de um número negativo usando a notação binária complementar, inverta todos os bits e, em seguida adicione 1”, ou seja este 128 em binário, cortando os zeros a esquerda 1000000, ou seja invertendo fica 01111111 e adicionando um, segundo o livro fica 1000000 novamente, ai fica -128, o que eu não entendi foi esta adição de 1 a 0111111 se tornar 1000000, alguém pode me explicar este cálculo?

http://www.youtube.com/watch?v=HRGaPnBTQL4

128 na base 10 = 10000000 na base 2.

O Java só trabalha com tipo primitivo com sinal, não é como C++ que você pode informar unsigned.

Por causa disso, ele precisa reservar um bit para indicar se o sinal está negativo ou não.

É por causa disso ainda que a capacidade de representação de um número positivo em Java é a metade do que poderia reprensentar.

Quando é 128, fica como negativo porque o bit mais significativo fica ligado 10000000, mas a apresentação do byte em Java cuida para mostrar 128 negativo.

Se estiver aprendendo manipulação binária, veja uma apostila completa em http://oracle2java.blogspot.com.br/2012/10/java-tutorial-para-manipulacao-binaria.html.

wiliamps

Bem agora entendi, a soma do 1 que dizia no livro era na forma decimal, fiz com o valor 150, que em binário fica 10010110 e invertido fica 01101001, este invertido representado em decimal fica 105, adicionando 1 decimal fica 106, e tonando negativo fica -106, o que se refletiu no meu exemplo abaixo:

Integer i2 = new Integer(150); byte b = (byte) i2.intValue(); System.out.println(b);