Revista Informática

De sistema decimal a sistema binario en c++ y Java

Publicado el 13 julio 2014 por Francves

De sistema decimal a sistema binario en c++ y Java
Para convertir un número de sistema decimal a binario debemos dividir este número entre 2, hasta que el dividendo sea menor a 2, es decir 1. Luego, se tomarán los restos de la división desde el último hasta el primero. 
Ejemplo:
71 dividido entre 2 es igual a 35 y el residuo igual a 1.
35 dividido entre 2 es igual a 17 y el residuo igual a 1.
17 dividido entre 2 es igual a   8 y el residuo igual a 1.
8   dividido entre 2 es igual a   4 y el residuo igual a 0.
4   dividido entre 2 es igual a   2 y el residuo igual a 0.
2   dividido entre 2 es igual a   1 y el residuo igual a 0.
1   dividido entre 2 es igual a   0 y el residuo igual a 1.
Entonces, en sistema binario 71 se escribe 1000111.
Un ejemplo más gráfico
De sistema decimal a sistema binario en c++ y Java
¿Como hacer esta operación en c++?
#include <iostream>
using namespace std;
int main(){
int numero, dividendo, resto, divisor = 2;
string binario = "";
cout << "Ingrese el numero decimal a convertir a sistema binario" << endl;
cin >> numero;
dividendo = numero;
while(dividendo >= divisor){ //Mientras el dividendo sea mayor o igual que el divisor, es decir, mayor o igual que 2.
resto = dividendo % 2;
if(resto == 1)
binario = "1" + binario; //Si el resto es igual a 1 concatenamos 1 a la variable string llamada binario
else
binario = "0" + binario; // Sino concatemanos 0
//Es importante este orden de concatenación (primero el bit y luego el valor de la variable) esto para que nuestro número
//en sistema binario esté ordenado correctamente.
dividendo = dividendo/divisor; // Actualizamos el valor del dividendo dividiendolo entre 2.
}
if(dividendo == 1)
binario = "1" + binario; // Por último sí el valor final del dividendo es 1 concatenamos 1 sino concatenamos 0.
else
binario = "0" + binario;
cout << "En sistema binario " << numero<< " se escribe " << binario << endl;
return 0;
}

En este ejemplo lo que haremos será leer el número que queremos convertir a sistema binario, luego el programa se encargará de realizar operaciones con el operador módulo (%) de c++ para saber el resto de cada división y luego ir concatenando estos restos de divisiones y formar el número en sistema binario. Estas concatenaciones las hacemos usando estructuras selectivas, según se cumpla que el resto sea igual a 1 o 0. 
Otra manera de realizar este algoritmo en c++ es haciendo uso de la clase stringstream para convertir número enteros en cadenas (strings). 
#include <iostream>
#include <sstream> // Para convertir el resto de la division de int a string.
using namespace std;
int main(){
int numero, dividendo, resto, divisor = 2;
string binario = "", ordenado = "";
stringstream stream; // De int a string
cout << "Ingrese el numero decimal a convertir a sistema binario" << endl;
cin >> numero;
dividendo = numero;
while(dividendo >= divisor){
resto = dividendo % 2;
stream << resto; // Almacena el resto de las divisiones concatenandolas en el objeto stream.
dividendo = dividendo/divisor;
}
stream << dividendo;
binario = stream.str(); //Almacenamos en la variable llamada binario de tipo string los valores concatenados del objeto stream.
for(unsigned int i = 0; i < binario.size(); i++)//Debemos ordenar los bits
ordenado = binario[i] + ordenado;
cout << "En sistema binario " << numero << " se escribe " << ordenado << endl;
return 0;
}

Así como el ejemplo anterior leemos el número que queremos saber su representación en el sistema binario. El resto de la división lo vamos almacenando en el objeto stream de tipo stringstream. A medida que vamos almacenando los restos estos se irán concatenando. Luego de concatenar todos los restos los guardamos en una variable de tipo string binario = stream.str();. Finalmente esta representación está al revés. Sí queremos la representación de 71 nos mostrará 1110001. Esto lo ordenaremos con el siguiente método.
for(unsigned int i = 0; i < binario.size(); i++)
ordenado = binario[i] + ordenado;
Recordar que el tipo de dato string es una cadena de caracteres y es por esto que lo podemos manipular de esta manera. 
Ejecución:
Ingrese el numero decimal a convertir a sistema binario567En sistema binario 567 se escribe 1000110111
¿Y en Java?
import java.util.Scanner;
public class DecimalABinario {
public static void main(String[] ar){
Scanner teclado = new Scanner(System.in);
int dividendo, resto, divisor = 2, numero;
String binario = "";
System.out.println("Ingrese el numero decimal a convertir a sistema binario");
numero = teclado.nextInt();
dividendo = numero;
while(dividendo >= divisor){ //Mientras el dividendo sea mayor o igual que el divisor, es decir, mayor o igual que 2.
resto = dividendo % 2;
if(resto == 1)
binario = "1" + binario; //Si el resto es igual a 1 concatenamos 1 a la variable string llamada binario
else
binario = "0" + binario; // Sino concatemanos 0
//Es importante este orden de concatenación (primero el bit y luego el valor de la variable) esto para que nuestro número
//en sistema binario esté ordenado correctamente.
dividendo = dividendo/divisor; // Actualizamos el valor del dividendo dividiendolo entre 2.
}
if(dividendo == 1)
binario = "1" + binario; // Por último sí el valor final del dividendo es 1 concatenamos 1 sino concatenamos 0.
else
binario = "0" + binario;
System.out.println("En sistema binario " + numero + " se escribe " + binario);
}
}

Funciona igual  que el primer ejemplo en c++ solo que está escrito en Java.
Otra forma mas sencilla sin hacer uso de estructuras selectivas sería solo concatenar los restos de la división con la variable String.
import java.util.Scanner;
public class DecimalABinario2 {
public static void main(String[] ar){
Scanner teclado = new Scanner(System.in);
int dividendo, divisor = 2, numero, resto;
String binario = "";
System.out.println("Ingrese el numero decimal a convertir a sistema binario");
numero = teclado.nextInt();
dividendo = numero;
while(dividendo >= divisor){
resto = dividendo % divisor;
binario = resto + binario;
dividendo = dividendo/divisor;
}
binario = dividendo + binario;
System.out.println("En sistema binario " + numero + " se escribe " + binario);
}
}

Ingresamos el número decimal que queremos su representación en sistema binario, luego hacemos un ciclo que se repetirá mientras el dividendo sea mayor o igual que el divisor, es decir, 2. Calculamos el resto de cada división y el resultado lo vamos concatenando en la variable binario. Finalmente el último valor del dividendo lo concatenamos a la variable binario y mostramos en pantalla la representación binaria del número que ingresamos. 
Ejecución:
Ingrese el numero decimal a convertir a sistema binario71En sistema binario 71 se escribe 1000111
También te podría interesar:
[Ejercicio resuelto c++ POO Herencia Vectores MVC] Una Asociación de Lancheros trasladan turistas.
Cuenta regresiva de minutos y segundos con c++.
Escribir en bloc de notas con c++ [Archivo/Ficheros c++].
Abrir una direccion web con c++.
Generar número aleatorio en Java Math.random().
Elevar un número a una potencia en java Math.pow.
[Ejercicio resuelto Java] Cuadrante en que se encuentra un punto en el plano.

Volver a la Portada de Logo Paperblog