Passar de binario para decimal

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!!!

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:

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

Valeu mesmo!
Tava quebrando a cabeça aqui!

Valeu!

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.

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