Transformar número binário para decimal

Nesse post mostro duas maneiras de algoritmizar o processo de conversão de um número binário para seu correspondente decimal. Na primeira forma é feito a leitura do valor para uma variável inteira e depois extraído cada dígito do valor. Na segunda forma, a leitura é feita para uma string (vetor de caracteres) e utilizado essa estrutura para conversão. São métodos distintos e que mostram como formas tão diferentes de resolver um problema conseguem alcançar o mesmo resultado.

Apenas para recordar, a transformação entre essas bases pode ser feita com a forma polinomial a seguir:

Número binário: 1101
1×23 + 1×22 + 0x21 + 1×20 => 8 + 4 + 0 + 1 = 13

Solução que extrai cada dígito do valor

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

int main(void) {
	int valorj, sobra, novoValor = 0;
	scanf("%i", &valor);

	//pega os dígitos da direita para a esquerda
	for (j = 0; j < 6; j++) {
		sobra = valor - ((valor / 10)*10);
		//printf("%i \n", sobra);
		valor = valor / 10;
		novoValor += sobra * pow(2,j);
	}
	printf("Decimal: %i \n", novoValor);

	return 0;
}

Solução utilizando string

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

int main(void) {
	char numero[10];
	scanf("%s", &numero);

	int i, tam, novoValor = 0;
	tam = strlen(numero); //verifica quantos dígitos tem no número
	
	//pega os dígitos da direita para a esquerda	
	for (i = tam-1; i >= 0; i--) {
		//printf("%c|", numero[i]);
		if (numero[i] == '1') {
			novoValor += pow(2,tam-1-i);
		}
	}
	printf("Decimal: %i", novoValor);
	
	return 0;
}

Experimente os códigos: http://ideone.com/6idvqI

Share

3 opiniões sobre “Transformar número binário para decimal

    1. Benjamin Grando Moreira

      Obrigado pelo aviso. Realmente na maioria dos compiladores será necessário adicionar a string.h

       
      Reply
  1. JULIO CESAR G SANTOS
    void decimalParaBinario(int i) {
      if (i > 1) {
        decimalParaBinario(i / 2);
        if (i) printf("%d", i % 2);
      }
      if ((i == 1) || (!i))
        printf("%d", i);
    }

     

     
    Reply

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.