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?
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.
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);