[Código] Decimal a binario

Iniciado por Mario Olivera, 21 Mayo 2015, 22:00 PM

0 Miembros y 1 Visitante están viendo este tema.

Mario Olivera

 Hola gente, como hace poco subi un codigo fuente, que convertia un binario a decimal, ahora dejo un codigo que convierte decimal a binario!, por las dudas dejo los dos códigos para el que quiera ver el otro :))

Decimal a binario

Código (cpp) [Seleccionar]
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

#include <cmath>
using std::pow;

int main()
{
int binario=0;
int restoDivision=0;
int unidadDivision=0;
int numero;
int iteracionBinaria=0;

cout <<"numero decimal: ";
cin >> numero;
cout <<endl;
unidadDivision= numero;


while (unidadDivision > 0)
{
restoDivision= unidadDivision % 2;
unidadDivision= unidadDivision / 2;

binario+= restoDivision * pow (10.,iteracionBinaria);

++iteracionBinaria;

if (numero == 2)
{
binario+= unidadDivision * pow (10.,iteracionBinaria);
}

}

cout <<"b: " <<binario <<endl;
cin.get();
cin.get();
return 0;
}


Binario a Decimal

Código (cpp) [Seleccionar]
#include <iostream>
using std::cin;
using std::endl;
using std::cout;

#include <cmath>
using std::pow;

int main()
{
// Variables
long int binario;
long int decimal=0;
long int auxBinario;
int resto;
bool respuesta= true;


cout <<"Binario: ";
cin  >> binario;

auxBinario= binario;

for (int contador=0; pow(10.,contador) <= binario; contador++)
{
resto= auxBinario % 10;
auxBinario/= 10;

switch (resto)
{
case 0:
decimal+= (resto * pow(2.0,contador));
break;

case 1:
decimal+= (resto * pow(2.0,contador));
break;

default:
respuesta= false;
break;
}

}

if (respuesta == true)
{
cout <<"\nEl binario " <<binario <<" es " <<decimal <<"\n";
}
else
{
cout <<"\nEl numero ingresado no es un binario!\n";
}
cin.get();
cin.get();
cin.get();
return 0;
}

xiruko

Hola, el código está bien. Te dejo otra manera de hacerlo con desplazamientos y máscaras a nivel de bit por si te apetece echarle un vistazo:

#include <stdio.h>

int main(void)
{
int number;
printf("[+] Numero decimal: ");
scanf("%d", &number);
if (number < 0 || number > 255) {
printf("[+] Rango permitido de 0 a 255\n");
return 0;
}

int i;
printf("[+] Resultado: ");
for (i=7; i>=0; i--) printf("%d", (number>>i)&1);
printf("\n");
return 0;
}


Saludos!

Stakewinner00

En C++11 normalmente me sirve esto

Código (cpp) [Seleccionar]
#include <bitset>

template <typename T>
std::bitset<sizeof(T)*8> to_bin(const T& src)
{return std::bitset<sizeof(T)*8>(src);}


lo meto en un .h por ejemplo

Código (cpp) [Seleccionar]
#include <iostream>
#include "to_bin.h"

int main()
{
  //const char* a = "001010";
  //char a = 0xFA;
  short a = 32;
  //bool a = 1;
  std::cout << to_bin(a);
}