Transforma Decimal em Binario

E ae pessoa criei um método que recebe numero decimal e retorna binario. Sou novato em programação e comecei aprender pelo java o código é o seguinte:

 public void binario(int numero)
    {
        int d = numero;
        int b;
        while ( d > 1){
            b = d % 2;
            System.out.println ( b );
            d -= d / 2 ;
        }
    }

Tipo eu quero saber se o java só arredonda o valar para cima, na finalização eu coloquei d-=d/2 tipo se o numero for 39 a metade é 19.5, eu pensei que o java arredonda isso para baixo ficando “19”, mas estava errado e como ele arredonda para cima no caso “20”, meu método acaba devolvendo o resultado errado e tbm quero perguntar como faço para que o resultado seja exibido de traz para frente “tipo se for 0101, exibir 1010” que é o jeito que eu deveria exibir o resultado do algoritmo caso ele funcionasse.

Acho que isso ajuda…

	public void binario(int numero) {
		int d = numero;
		StringBuffer binario = new StringBuffer(); // guarda os dados
		while (d > 0) {
			int b = d % 2;
			binario.append(b);
			d = d >> 1; // é a divisão que você deseja
		}
		System.out.println(binario.reverse().toString()); // inverte a ordem e imprime
	}

[]´s

[quote=rodrigousp]Acho que isso ajuda…

	public void binario(int numero) {
		int d = numero;
		StringBuffer binario = new StringBuffer(); // guarda os dados
		while (d > 0) {
			int b = d % 2;
			binario.append(b);
			d = d >> 1; // é a divisão que você deseja
		}
		System.out.println(binario.reverse().toString()); // inverte a ordem e imprime
	}

[]´s
[/quote]

vlw cara resolveu meu problema, mas me esplica essa finalização do laço d = d >> 1 que eu ñ entendi. Vlw

Então… o shift é o seguinte…
digamos que x valha 19, em binário 10011.
x >> 1
10011 >> 1 = 1001
percebeu!? eu eliminei o bit menos significativo (o bit mais a esquerda).
Isso chama deslocamento a esquerda ou shift a esquerda.

É o mesmo efeito que o resultado da divisão inteira por 2. (x /2)

Mas o deslocamento de bits permite fazer divisões por outras potências de 2 também.
x >> 2
10011 >> 2 = 100
que é o mesmo que 19 / 4.

PS: Em tempo, seu programa funciona com d =d/2, no lugar de d = d >> 1.

[]´s

Hummm, entendi o que quis dizer com seu algoritmo implementado com operadores bitwise. Mas tenho uma dúvida: As operações que operação sobre o bit do número são mais rápidas que operações que lidam com por exemplo números inteiros?

Abraços

Sim, mas nesse caso é irrelevante.

Obs:
Eu sei que a multiplicação é implementado em microcódigo como um somatórios de shift. Agora, eu não sei como funciona a divisão.


c := 0
while b ≠ 0
    if (b and 1) ≠ 0
        c := c + a
    shift a left by one
    shift b right by one 
return c

[quote=rodrigousp]Então… o shift é o seguinte…
digamos que x valha 19, em binário 10011.
x >> 1
10011 >> 1 = 1001
percebeu!? eu eliminei o bit menos significativo (o bit mais a esquerda).
Isso chama deslocamento a esquerda ou shift a esquerda.

É o mesmo efeito que o resultado da divisão inteira por 2. (x /2)

Mas o deslocamento de bits permite fazer divisões por outras potências de 2 também.
x >> 2
10011 >> 2 = 100
que é o mesmo que 19 / 4.

PS: Em tempo, seu programa funciona com d =d/2, no lugar de d = d >> 1.

[]´s

[/quote]

Entendi pessoa, obrigado.