Passar de binario para decimal

5 respostas
V

Galera,

Me ajudem por favor!
Não estou conseguindo executar meu prog.
Ele nao passa de binario para decimal de jeito nenhum.

Alguem poderia me ajudar???
Segue código…

// Código
// Pacotes de extensão de java
import javax.swing.JOptionPane;

public class BinarioDecimal{

// inicia o método main
public static void main (String args [])
{
     int i, num2, num1;  // declara variáveis int
     String xVal, aux;	// declara variáveis String

     // inicializa variáveis
     num2 = 0;
     num1 = 0;

     // Entrada de dados				
     xVal = JOptionPane.showInputDialog(
	"Digite o número binário");
	
     // armazena a variável xVal em aux
     aux = new String (xVal);
	
     // retorna o tamanho da variável aux
     num2 = aux.length();
	
     // laço para cálculo
     for (i = 0; i < num2; i++) {
 	num1 = num1 + (aux.charAt(i) * (2 ^ i));
     }

     // exibe os resultados		
     JOptionPane.showMessageDialog (null, "O resultado é " + num1 );
	
     // fim do programa
     System.exit(0);
	
}  // fim do método main

} // fim da classe

Obrigado!!!

5 Respostas

S

Olha cara,

As potências aumentam da direita pra esquerda.
Seu programa tá fazendo da esquerda pra direita.

Entendeu?
Essa repetição tá usando a potência 0 no caractere 0, 1 no 1, etc…
:wink:

T

Olá viniciusst. Algumas observações sobre seu programa:

aux = new String (xVal);

1 - Não há motivo para criar uma cópia do String.

for (i = 0; i < num2; i++) {
    num1 = num1 + (aux.charAt(i) * (2 ^ i));
}

2 - Como Schuenemann falou, as potências aumentam da esquerda para a direita.
3 - O valor retornado por charAt não vai ser 0 ou 1, mas sim seu código unicode, para obter os 0’s e 1’s seria necessário subtrair o caractere ‘0’.
4 - O operador ^ é um XOR binário e não têm nada a ver com exponenciação.

Isso funcionaria:

import javax.swing.JOptionPane;

public class BinarioDecimal {

    public static void main (String args []) {
        int resultado = 0;
        String entrada = JOptionPane.showInputDialog("Digite o número binário");
        for (int i = entrada.length() - 1; i >= 0; i--) {
            resultado += (entrada.charAt(i) - '0') * (1 << (entrada.length() - 1 - i));
        }
        JOptionPane.showMessageDialog (null, "O resultado é " + resultado);
    }
}

Outra opção (bem mais simples) seria usar o método parseInt da classe Integer:

public static int parseInt(String s, int radix) throws NumberFormatException
V

Valeu mesmo!
Tava quebrando a cabeça aqui!

Valeu!

M

Alguém sabe passar números fracionários de binário para decimal e vice-versa.
To precisando fazer um trabalho mas tá difícil.

VAlew.

S

faz as potências reduzindo 0,-1,-2…

Criado 5 de dezembro de 2004
Ultima resposta 5 de mai. de 2006
Respostas 5
Participantes 5