este 0x indica que o numero está na base hexadecimal:
public static void main(String[] args)
{
char a = 0x0041; // hexadecimal: corresponde ao caracter 'A'
System.out.println(a);
System.out.println((int) a); // valor inteiro -> 65
System.out.println((int) 'A');
System.out.println(Integer.toHexString(65)); // valor hex de 65
}
public static void main(String[] args)
{
// byte -> 127
byte b1 = 127;
byte b2 = (byte) 128; // o compilador avisa para fazer cast em um byte só cabe 127
byte b3 = (byte) 129;
byte b4 = (byte) 130;
byte b5 = (byte) 131;
System.out.println(b1);
System.out.println(b2);
System.out.println(b3);
System.out.println(b4);
System.out.println(b5);
}
até o 127 vai tranquilho, mas 128 nao cabe num byte entao:
como o 128 estourou o tamanho para um byte o java faz o complemento de 2, que converte o numero para binario, depois inverte os bits, isto é, o que era 0 vira 1 e vice-versa… ai soma 1.
se converter 128 para binario -> 10000000,
10000000 -> 128 em binario
01111111 -> inverte os bits
+ 00000001 -> soma 1
-> 10000000 -> isto é 128 se converter para decimal, mas o bit a esquerda que representa o sinal é 1, entao o numero ficou negativo...
e fica -128
pois o zero a esquerda representa o sinal.
0 -> positivo
1 - negativo
de uma pesquisado sobre complemento de 2 para entender melhor… 