inversÃo de bits ~

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…

Dá uma olhada em:
http://www.guj.com.br/posts/list/19527.java

Valeu irmão,

não estava dando certo pq eu não estava fazendo o cast pra byte.