[C#] Conversão binário para decimal

Nesse tutorial busco mostrar como fazer a conversão numérica entre decimal e binário (e vice-versa) usando C#. Let´s go!

Primeiramente vamos entender como é representado o sistema binário. Diferentemente da numeração decimal que estamos acostumados, o sistema binário possui somente dois algarismos: 0 e 1. Esse sistema é muito usado em computação, pelo fato de o computador usual (não estamos falando de computadores quânticos) representar informações através de cargas elétricas, que podem ser negativas (um 0) ou positivas (um 1).

Abaixo segue um exemplo de um número binário, que em decimal é representado pelo número 44:
101100

Entendendo isso vamos apresentar as conversões:

BINÁRIO PARA DECIMAL

Caso eu queira converter o número para decimal, basta seguirmos os seguintes passos:
a) Inverte-se o número;
b) Multiplica cada dígito por 2 elevado a um expoente, que inicialmente é zero, cujo valor aumenta em 1 unidade a cada novo dígito multiplicado.

Para visualizar melhor, veja a “Figura 1” que está em anexo, que converte o binário 001011 para decimal!

Figura 1

Agora vamos á nossa implementação!
1 – Criamos uma classe chamada ClasseBinarioDecimal.cs
2 – Criamos um método estático que será usado para inverter o número

public static string InverterString(string str){
    int tamanho = str.Length;
    char[] caracteres = new char[tamanho];
    for (int i = 0; i < tamanho; i++){
        caracteres[ i ] = str[tamanho - 1 - i];
    }
    return new string(caracteres);
}

3 – agora o método de conversão:

public static int BinarioParaDecimal(string valorBinario){
    int expoente = 0;
    int numero;
    int soma = 0;
    string numeroInvertido = InverterString(valorBinario);
    for(int i = 0; i < numeroInvertido.Length; i++){
        //pega dígito por dígito do número digitado
        numero = Convert.ToInt32(numeroInvertido.Substring(i,1));
        //multiplica o dígito por 2 elevado ao expoente
        // e armazena o resultado em soma
        soma += numero * (int)Math.Pow(2,expoente);
        // incrementa o expoente
        expoente++;
    }
    return soma;
}

Existe também uma forma mais rápida de se fazer a conversão (só não coloquei antes para não perder a graça ): O próprio C# possui um método de conversão, utilizando-se Convert:

public static int BinarioParaDecimal2(string valorBinario){
    return Convert.ToInt32(valorBinario,2);
}

DECIMAL PARA BINÁRIO

Para converter um número decimal para binário, deve-se dividir o número decimal por 2 e obter o resto, que deve dar 1 ou 0. O resultado da divisão deve ser dividido por 2 novamente e assim sucessivamente, até que o quociente seja 0.
Ao final pegamos todos os restos, mas invertidos!

Para visualizar melhor, veja a “Figura 2” que está em anexo!

Figura 2

Agora, a implementação!

public static string DecimalParaBinario(string numero) {
    string valor = "";
    int dividendo = Convert.ToInt32(numero);
    if (dividendo == 0 || dividendo == 1){
        return Convert.ToString(dividendo);
    }
    else{
        while (dividendo > 0){
            valor += Convert.ToString(dividendo % 2);
            dividendo = dividendo / 2;
        }
        return InverterString(valor);
    }
}

Crie um formulário, com um textbox (cujo name é editValor) e dois botões: um para converter o valor para decimal e outro para binário.
Segue abaixo as implementações!

string valorBinario = ClasseBinarioDecimal.DecimalParaBinario(editValor.Text);
labelResposta.Text = 
    "O valor " + editValor.Text + " convertido para binário é: "
        + valorBinario;
int valorDecimal = ClasseBinarioDecimal.BinarioParaDecimal2(editValor.Text);
labelResposta.Text = 
    "O valor " + editValor.Text + " convertido para decimal é: "
        + valorDecimal;

Ufa! Então é isso! Abraços!