LusoRobótica - Robótica em Português

Robótica => Iniciantes => Tópico iniciado por: OxyGen em 13 de Maio de 2010, 15:21

Título: Converter Binário para Decimal
Enviado por: OxyGen em 13 de Maio de 2010, 15:21
Boas a todos...

Já tentei procurar aqui http://www.cplusplus.com/reference/clibrary/ (http://www.cplusplus.com/reference/clibrary/) por uma função que convertesse binário para decimal e vice-versa, mas não encontrei nem uma nem outra... Consegui fazer a função que converte decimal para binário mas não consigo fazer o contrário...

Deixo aqui o que fiz:

Código: [Seleccione]
unsigned int dec2bin(int dec)
{
 
  int bin=0, i=1;
  while(dec!=0)
  {
    bin+=(dec%2)*i;
    dec=dec/2;
    i*=10;
  }
  return bin;
}

Se alguém me pudesse ajudar a fazer a conversão binário para decimal agradecia...  Numeros apenas entre 0 e 9.

Cumps
Título: Re: Converter Binário para Decimal
Enviado por: TigPT em 13 de Maio de 2010, 15:40
http://pt.wikipedia.org/wiki/Convers%C3%A3o_entre_sistemas_num%C3%A9ricos (http://pt.wikipedia.org/wiki/Convers%C3%A3o_entre_sistemas_num%C3%A9ricos)

Será que ajuda?
Título: Re: Converter Binário para Decimal
Enviado por: OxyGen em 13 de Maio de 2010, 16:11
Pois... mas o meu problema é em relação ao código...

Código: [Seleccione]
unsigned int bin2dec(unsigned int num)
{
  char bin[num];
  int i = 0;
  int j = strlen(bin);
  int res =0;
 
  while(i!='\0')
  {
    res=res + bin[i]*2^j;
    i++;
    j--;
  }
  return res;
}

Tento fazer isto e dá-me too many arguments... Já tentei separar o res mas continua na mesma...
Título: Re: Converter Binário para Decimal
Enviado por: senso em 13 de Maio de 2010, 17:02
Mete isto a substituir a tua função, funciona bem para numeros entre 0 e 99:
Código: [Seleccione]
unsigned int bin2bcd(unsigned int valBin)
{
return ((valBin / 10) << 4) + (valBin % 10);
}
Título: Re: Converter Binário para Decimal
Enviado por: OxyGen em 13 de Maio de 2010, 18:01
É impressão minha ou tu andas na Univ de Aveiro? Existe um guião das práticas de AC2 exactamente com essa função, mas o enunciado era:

Note: A conversão de um valor em hexadecimal para o correspondente em decimal pode ser
efectuada, de forma simplificada (se o resultado for igual ou inferior a 99), do seguinte modo:
Título: Re: Converter Binário para Decimal
Enviado por: senso em 13 de Maio de 2010, 18:49
Sim, isso é do guião de AC2 e sim, sou tambem um ET de aveiro, hex ou binário é o mesmo, por isso essa função serve para o efeito.
Título: Re: Converter Binário para Decimal
Enviado por: Mateus_NG em 04 de Dezembro de 2018, 21:00
tente isso, funciona legal até 10 bits no arduino.

Código: [Seleccione]
int n_decimal = 0;
unsigned int n_binario = 11111111111; // Uso adequado até o número 1023. O limite se dá pela capacitade de armazenamento da variável do arduino, caso contrario bastaria aumentar cont.

void setup() {
  Serial.begin(115200);

n_decimal = converte_para_decimal(n_binario);

Serial.print(n_binario);
Serial.print("   ");
Serial.println(n_decimal);
 
}

int converte_para_decimal(int binario)
{
 
int decimal = 0;
int decimal_an = 0;
int cont =9; //9 depois estoura
double divisor = 1*(pow(10,cont));
int elevado = 0;
int razao = 0;

for(cont ;cont>=0; cont--){

razao = binario/divisor;

if(binario>=divisor){
    if(razao==1){
    elevado = pow(2,cont);
    decimal = decimal_an+elevado;
    decimal_an = decimal;
    }
    binario = binario-divisor;
}
divisor=divisor/10;
}

return decimal;
 
}

void loop() {
 
}
Título: Re: Converter Binário para Decimal
Enviado por: jm_araujo em 04 de Dezembro de 2018, 21:58
Holy zombie thread, Batman!

8 anos tem de ser um record!!!


E com duas divisões num loop deve dar certamente para otimizar