Transforma Decimal em Binario

6 respostas
R

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.

6 Respostas

R

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

R

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

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

R

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

F

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

R

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
R

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

Entendi pessoa, obrigado.

Criado 23 de julho de 2008
Ultima resposta 24 de jul. de 2008
Respostas 6
Participantes 3