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.
publicvoidbinario(intnumero){intd=numero;StringBufferbinario=newStringBuffer();// guarda os dadoswhile(d>0){intb=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
Rudy
rodrigousp:
Acho que isso ajuda…
publicvoidbinario(intnumero){intd=numero;StringBufferbinario=newStringBuffer();// guarda os dadoswhile(d>0){intb=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
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
F
fCandido
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
rodrigousp
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.
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.