Metodo para converter binário para decimal

4 respostas
antonio_nobrega

Gente, meu professor passou um exercicio para converter um numero binario para um inteiro sem usar parseInt(), nao sei o que esta errado com o que estou fazendo mas nao esta dando certo. Voces poderiam me apontar o erro e uma solução?

public String converterParaDecimal (String numBinario){
	
		double resultado = 0;
		
		for ( int i = 0; i < numBinario.length(); i++ ){
			int y = numBinario.charAt(numBinario.length() - 1 - i);
			double z = y * Math.pow(2, i);
			resultado = resultado + z; 
		}
		
		System.out.println("O número binário que você digitou equivale ao decimal " + resultado);
		
		return String.valueOf(resultado);
	}

4 Respostas

pmlm

antonio_nobrega:
int y = numBinario.charAt(numBinario.length() - 1 - i);

O método charAt devolve um char. Ao atribuires o valor a um int estás a atribuir o valor do código ASCII e não o valor do 0 ou 1 representado na String

antonio_nobrega

Ah entendi…no caso um jeito de resolver isso seria:

double z = (y - 48) * Math.pow(2, i);

Mas como eu faria sem usar esse -48?

pmlm

Como é um binário apenas pode ter 0 e 1 , certo?

E se tiver 0 não vai somar nada ao resultado e se tiver 1 não precisas de multiplicar por y (já que a multiplicação por 1 dá o próprio número).

Porque não então:

char y = numBinario.charAt(numBinario.length() - 1 - i);   //char e não int
             if (y == '1') { // assim com as '' porque é um char
                 double z = Math.pow(2, i);  //não precisas multiplicar pelo y
                 resultado = resultado + z;   
            }
antonio_nobrega

Realmente não tinha me passado pela cabeça.
Muito obrigado pela dica ^^.

Criado 16 de setembro de 2010
Ultima resposta 16 de set. de 2010
Respostas 4
Participantes 2