Ir para conteúdo
Fórum Script Brasil
  • 0

Binario P/ Decimal [resolvido]


rafmattos

Pergunta

5 respostass a esta questão

Posts Recomendados

  • 0

É só elevar 2 à uma sequência começando por 0 (para cada um dos bits) e multiplicar pelo valor do bit. Essa multiplicação serve para ignorar os valores de bit 0 (já que qualquer número multiplicado por 0 vai dar 0). Exemplo (considere ^ como "elevado a" - no código mesmo você terá que utilizar Math.pow()):

110

2^2*1 + 2^1*1 + 2^0*0

1101

2^3*1 + 2^2*1 + 2^1*0 + 2^0*1

Sacou? wink.gif

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Um algoritmo mais otimizado seria você utilizar uma só variável.

A cada passo ele soma 1 (se for o caso) e multiplica por 2. Assim você aproveita os resultados anteriores. biggrin.gif

Ex: 1101

tmp = 0

soma 1, pois o bit 4 é verdadeiro -> tmp = 1;
como há um bit 3, multiplica por dois -> tmp = 2;

soma 1 novamente, pois o bit 3 é verdadeiro -> tmp = 3;
como há um bit 2, multiplica por dois -> tmp = 6;

não soma 1, pois o bit 2 é falso -> tmp = 6;
como há um bit 1, multiplica por dois -> tmp = 12;

soma 1 de novo, pois o bit 1 é verdadeiro -> tmp = 13;
não há proximo bit, então termina.

resultado: 13

É bem facil implementar.

[]'s

Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal obrigado pela ajuda, mas ainda não consegui já tentei de tudo que é jeito e ainda nada, é que to começando a programar em java agora, se vocês poder me ajudar com o código ficarei agradecido.

public static int BinToDec(String bin)

{

int i, aux, retorno, length_bin;

retorno = 0;

length_bin = bin.length();

for (i=0;i<length_bin;i++)

{

aux = bin.charAt(i);

retorno = ( ((2^(length_bin-i) ))) + retorno;

}

return(retorno);

}

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, já identifiquei os problemas, por isso vão algumas perguntas (as quais se você mesmo responder, encontrará a solução):

Por que você coloca um valor em "aux" e não utiliza esse valor depois (não há referência a aux em lugar algum)?

Tem certeza que atribuir um char para um inteiro te dará o valor correspondente do mesmo? Faça o teste para imprimir "aux" e você verá.

Leia novamente o primeiro post a respeito do "^" (foi só uma notação utilizada no exemplo!).

O resultado de "length_bin-i" é mesmo o que você precisa? Note que no cálculo os valores dos expoentes começam a partir de 0.

Tente consertar aí. De preferência, escreva cada um dos elementos do cálculo (usando System.out.print) dentro da função e veja se eles estão realmente com os valores esperados. Qualquer coisa, 'stamos aí.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado pela ajuda... agora eu consegui.

public static int BinToDec(String bin){

int length_bin = 0, aux = 0, retorno = 0, i;

length_bin = bin.length();

for (i=0;i<length_bin;i++)

{

aux = Integer.parseInt(bin.substring(i,i+1));

retorno += aux*(int)Math.pow(2,(length_bin-i))/2;

}

return(retorno);

}

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...