Código binToDec dando erro. Ajuda!

import java.util.Scanner;

public class teste2 
{  
  
  public static void main( String[] args ) 
  { 
  
		int soma = 0;
		int digito = 0;
		int digito2 = 0;
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("Digite a quantia de digitos do numero binario: ");
		int expoente = sc.nextInt();
		System.out.println("Digite os " + expoente + " algarismos do numero binario.");
		while ( expoente > -1 )
		{
			digito = sc.nextInt();
			
			expoente = expoente - 1;
			digito2 = digito * ( 2 ^ expoente );
			soma = soma + digito2;
		}
		System.out.println();
		System.out.println("O resultado eh: " + soma );
		
	}
	
}

Eu quero que ele pegue a quantia de digitos e tome isso como um expoente.
A partir que comece o calculo ele diminui 1 do expoente e repete o processo até que o expoente seja maior que -1 ( no caso se o expoente comecou no 5 ao chegar no 0 ele para ).

E o resultado de cada calculo com o expoente diferente vai somando pra dar o valor final.

Mas não ta dando certo… Ta retornando um valor errado…

Alguém por favor analisa o código e me da uma luz !!!

O símbolo ^ não faz exponenciação. Ele é o simbolo para a operação de XOR:
http://download.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

Para fazer exponenciação troque:

2 ^ expoente

Por:

Math.pow(2, expoente)

Valeu cara !

Agora ta funcionando certinho !!

Boa Tarde, kolling!

Substitua a linha:

digito2 = digito * ( 2 ^ expoente );

por:

digito2 = digito * ( (int)Math.pow(2, expoente) );

Como o grande ViniGodoy te orientou, e repare que seu loop não precisa ser até 0 e sim até 1, então o while pode ficar assim:

while ( expoente > 0 )  

Dessa forma você elimina do loop uma iteração que estava sendo inútil, o pedido de um número a mais ao usuário (se informado 8 digitos, tava pedindo 9) bem como alguns processos matemáticos e agora também um cast, afinal um número elevado a 0 é igual a 1 e um número multiplicado por 1 é ele mesmo.

Abraço e bons estudos!