Pessoal,
estou estudando inversão de bits que aparentemente é muito fácil, mas quando fui testar na máquina estranhei os resultados.
Por exemplo:
[code]
byte num = 56;
System.out.println("antes " + num);
num = ~num;
System.out.println("depois " + num);[/code]
O Resultado disso é
56 na primeira impressão;
-57 na segunda impressão;
Mas 56 em binário é = 111000
E -57 em binário é
11111111 11111111 11111111 11001000
Pra passar de decimal para binário uso o método toBinayString(int i) do pacote java.lang.
String xx = Integer.toBinaryString(m);.
Mas o correto não seria
11111111 11111111 11111111 11000111, uma vez que o inverso de 111000 é 000111?
Valeu pessoal, acredito que entendendo isso de quebra eu entenderei <<, >> e >>> de NÚMERO NEGATIVO.
Matéria de certificação…
Bom, vamos lá pra você entender melhor faça o seguinte:
public static void main(String[] args)
{
byte num = 56;
System.out.println("antes " + num);
System.out.println(Integer.toBinaryString(num));
num = (byte)~num;
System.out.println("depois " + num);
System.out.println(Integer.toBinaryString(num));
}
a saída é:
vai perceber que ~ é usado para inverter todos os bits de um número
logo 111000 vai virar 000111
e por que desse monte de 1 na frente???
quanto você converte para um Integer ele ocupa todas as casas do Integer (ou seja, as 32 casas)
espero ter ajudado
Uai, fiz este programinha:
byte b = 56;
System.out.println (Integer.toBinaryString (b));
System.out.println (Integer.toBinaryString (~b));
e deu o seguinte resultado:
111000
11111111111111111111111111000111
Alguém está “comendo bola” aqui…
Valeu irmão,
não estava dando certo pq eu não estava fazendo o cast pra byte.