inversÃo de bits ~

4 respostas
jesley.sena

Pessoal,

estou estudando inversão de bits que aparentemente é muito fácil, mas quando fui testar na máquina estranhei os resultados.

Por exemplo:
byte num = 56;

System.out.println("antes " + num);

num = ~num;

System.out.println("depois " + num);
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.

4 Respostas

santoro

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

T

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…

santoro

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

jesley.sena

Valeu irmão,

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

Criado 10 de agosto de 2005
Ultima resposta 10 de ago. de 2005
Respostas 4
Participantes 3