C# - Convertendo binário para decimal e vice-versa


Hoje veremos uma operação fundamental que todo o programador C# deve saber : converter binário para decimal e vice-versa.

O sistema binário possui somente dois algarismos: 0 e 1.

Esse sistema é muito usado nos computadores, pois o computador representa informações através de cargas elétricas, que podem ser positivas (1) ou ser negativas (0).

Conversão Decimal/Binário e vice-versa

1- Para converter um número de binário para decimal podemos fazer assim:

Exemplo: Converter o binário 10101 para decimal.  Invertendo 10101 obtemos 10101:

1 x 2^0  1
0 x 2^1  0
1 x 2^2  4
0 x 2^3  0
1 x 2^4  16

O número decimal é obtido somando os resultados: 1 + 0 + 4 + 0 + 16 = 21

O resultado é que 10101 é igual a 21.

2- Para converter um número decimal para binário podemos fazer assim:

Exemplo:  Converter o número 12 para binário

     Resto
 12 / 2  6    0
   6 / 2  3    0
   3 / 2  1    1
   1 / 2  0    1

Agora basta obter o resto na ordem reversa : 1100.  Assim 12 é igual ao binário 1100

Então bora pró código fazer a implementação na linguagem C#.

recursos:

Criando o projeto Console .NET Core no VS 2019

Crie um projeto Console do tipo .NET Core chamado CShp_ConversaoBinariaDecimal;

Crie a classe Conversor no projeto com o código abaixo:

using System;
using System.Linq;
namespace CShp_ConversaoBinariaDecimal
{
    class Conversor
    {
        public static int BinarioDecimal(string numeroBinario)
        {
            int expoente = 0;
            int numero;
            int soma = 0;
            string numeroInvertido = ReverteString(numeroBinario);
            for (int i = 0; i < numeroInvertido.Length; i++)
            {
                numero = Convert.ToInt32(numeroInvertido.Substring(i, 1));
                soma += numero * (int)Math.Pow(2, expoente);
                expoente++;
            }
            return soma;
        }
        public static string DecimalBinario(string numeroDecimal)
        {
            string valor = "";
            int dividendo = Convert.ToInt32(numeroDecimal);
            if (dividendo == 0 || dividendo == 1)
            {
                return Convert.ToString(dividendo);
            }
            else
            {
                while (dividendo > 0)
                {
                    valor += Convert.ToString(dividendo % 2);
                    dividendo = dividendo / 2;
                }
                return ReverteString(valor);
            }
        }
        public static string ReverteString(string str)
        {
            return new string(str.Reverse().ToArray());
        }
    }
}

Definimos neste código os seguintes métodos:

  1. BinarioDecimal
  2. DecimalBinario
  3. ReverteString

Agora para testar vamos definir o código no arquivo Program.cs conforme abaixo:

using System;
namespace CShp_ConversaoBinariaDecimal
{
    class Program
    {
        static void Main(string[] args)
        {
            string opcao;
            do
            {
                Console.WriteLine("Escolha a sua opção :");
                Console.WriteLine("\tb - Converter Binário para Decimal");
                Console.WriteLine("\td - Converter Decimal para Binário");
                Console.WriteLine("\tq - Encerra o programa");
                Console.Write("Sua opção ? ");
                opcao = Console.ReadLine();
                switch (opcao)
                {
                    case "b":
                        ConverteBinarioParaDecimal();
                        break;
                    case "d":
                        ConverteDecimalParaBinario();
                        break;
                    case "q":
                        Console.WriteLine("Bye.");
                        break;
                }
                Console.ReadKey();
            } while (opcao != "Q" && opcao != "q");
        }
        private static void ConverteDecimalParaBinario()
        {
            Console.WriteLine("Informe o numero decimal a converter");
            string valor = Console.ReadLine();
            string resultado = Conversor.DecimalBinario(valor);
            Console.WriteLine($" O numero {valor} é igual a {resultado} ");
            Console.WriteLine();
        }
        private static void ConverteBinarioParaDecimal()
        {
            Console.WriteLine("Informe o numero binário.");
            string valor = Console.ReadLine();
            int resultado = Conversor.BinarioDecimal(valor);
            Console.WriteLine($" O numero {valor} é igual a {resultado} ");
            Console.WriteLine();
        }
    }
}

Executando o programa iremos obter o seguinte resultado:

Pegue o projeto completo aqui: CShp_ConversaoBinariaDecimal.zip

"Levantarei os meus olhos para os montes, de onde vem o meu socorro.
O meu socorro vem do Senhor que fez o céu e a terra."

Salmos 121:1,2

Referências:


José Carlos Macoratti