You are on page 1of 8

lunes, 11 de julio de 2011

Convertir de Decimal a Binario en Java

Este programa en Java recibe un entero decimal y lo convierte a binario. Hay varias
formas de realizar esta conversin. En tanto preparo otras, aqu va esta versin.
El algoritmo consta de los siguientes pasos:

Expresar el nmero x como una combinacin lineal de potencias de dos

x = a0*2 + a1*2 + a2*2 + a3*2 + .....

Y entonces, mientras x != 0 se hace lo siguiente


{
Si x es impar, entonces
el siguiente coeficiente ai es 1
se resta 1 a x
se divide x entre 2

Si x es par, entonces
el siguiente coeficiente ai es 0
se divide x entre 2

Tal vez un ejemplo sencillo sea ms ilustrativo, sea x = 5


5 se puede expresar como:

5 = a0*2 + a1*2 + a2*2 + a3*2 + ....


como el numero x es impar, entonces a0 = 1
restando 1 en ambos lados de la ecuacin se tiene

4 = a1*2 + a2*2 + a3*2 + ....

despus se divide entre 2 ambos lados

2 = a1*2 + a2*2 + a3*2 + ....

en este caso x es par, por lo cual a1 = 0 se divide todo entre 2 y queda

1 = a2*2 + a3*2 +.....

en este caso x es impar, asi que a2 = 1


Se resta 1 en ambos lados y se cumple la condicin de que el nmero x es 0. El
resultado es:

a0 = 1
a1 = 0
a2 = 1

y los otros coeficientes son cero. De esta forma se ha mostrado cmo convertir de
decimal a binario el nmero 5. ste es el algoritmo que se utiliza en el siguiente
programa:

ste archivo debe guardarse con el nombre: UsaConvertirBinario.java


import java.util.Scanner;

public class UsaConvertirBinario


{ // Abre clase UsaConvertirBinario

public static void main( String args[])


{ // Abre main

System.out.print("\nEste programa convierte decimales a ");


System.out.print("binario.\n");
Scanner entrada = new Scanner(System.in);
ConvertirBinario miObjeto = new ConvertirBinario();
int numero;

System.out.print("\nPor favor introduzca un numero ");


System.out.println("y se imprimira su equivalente en binario: ");

numero = entrada.nextInt();
miObjeto.Binario( numero );

} // Cierra main
} // Cierra clase UsaConvertirBinario

El siguiente cdigo debe guardarse con el nombre: ConvertirBinario.java

public class ConvertirBinario


{ // Abre clase ConvertirBinario
/* La variable Tamano controla el numero de
simbolos que se requieren para hacer la conversion
Para llevar un registro de los simbolos se usa un
arreglo. Estos se deben guardar porque se van generando
de derecha a izquierda, pero la impresion es de
izquierda a derecha.*/

private int Tamano = 35;


/* La variable Tanamo se fija en 35, porque
los enteros en java son de 32 bits (4 bytes)
y ademas el ultimo se reserva para el signo
por lo tanto con 35 se cubre bien el rango*/

private int[] a = new int[Tamano];

/////////////////////////////////////
// METDODO BINARIO
/////////////////////////////////////
public void Binario( int x )
{ // Abre metodo Binario
System.out.println("\nAqui esta el numero en notacion binaria: ");

// Se llena el arreglo con ceros


for ( int i = 0; i < Tamano; i++ )
{ // Abre for
a[i] = 0;
} // Cierra for

int j = 0;

while ( 0 != x )
{ // Abre while

if ( 0 != x % 2 )
{ // Abre if
a[j++] = x % 2;

// Se resta el residuo
x -= x % 2;

// Se divide entre 2
x /= 2;
} // Cierra if

else
{ // Abre else
a[j++] = 0;

// Se cambia x
x /= 2;
} // Cierra else

} // Cierra while

/* El numero en binario, que se ha guardado


en el arreglo, se manda a imprimir */

Imprimir();

} // Cierra metodo Binario

///////////////////////////////////
//METODO IMPRIMIR
///////////////////////////////////

public void Imprimir( )


{ // Abre metodo Imprimir
/*El arreglo se imprime de la ultima posicion
a la primera. Sin embargo, es muy probable
que las ultimas sean 0. Como estan a la derecha
no es necesario imprimirlos. La variable estatus
inicia con "afuera", lo cual indica que los ceros
no deben imprimirse */

String estatus = "afuera";

for ( int i = Tamano - 1; i >= 0; i-- )

switch ( a[i] )
{ // Abre switch
case 0:
if ( "adentro" == estatus )
System.out.printf("0");
break;

case 1:
System.out.printf("1");
estatus = "adentro";
break;

default :
System.out.printf("ERROR. EL PROGRAMA ESTA MAL!");
break;
} // Cierra switch

/* Es probable que se haya introducido el numero 0


y en este caso la variable estatus permanecio
como "afuera" y no se imprimio el 0.*/

if ( "afuera" == estatus )
System.out.printf("0");

System.out.println("\n");

} // Cierra metodo Imprimir

} // Cierra clase ConvertirBinario

Quizs tambin le interese:


Sedgewick2.5 (Convertir de Decimal a Binario en C++)
Convertir de Binario a Decimal en C
Deitel_Java_6.38 (De Decimal a Binario, Octal y Hexadecimal en Java)

Linkwithin

Publicado por Candelario Hernndez Gmezen 7/11/2011 11:05:00 p. m.

Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook


Etiquetas: Java

6 comentarios:
1.

Annimo14 de septiembre de 2012, 23:08


no mustra la clase , solo el metodo ya hecho
o estoy mal?
Responder
Respuestas

1.
Hitmontop15 de septiembre de 2012, 0:26
El programa consta de dos archivos, cada uno de los cuales contiene una clase.
El primero de ellos es, por decirlo de una manera, el maestro. Contiene al
mtodo main en una clase que, por ponerle un nombre, le he llamado
UsaConvertirBinario, y es desde donde se llama a los mtodos que hacen la
tarea, los cuales se encuentran en el segundo archivo, llamado
ConvertirBinario.java. En sta clase se encuentra un par de mtodos, el
primero, llamado Binario realiza la conversin con el algoritmo explicado arriba.
El segundo se llama Imprimir, y es importante, porque las computadoras
imprimen los nmeros de izquierda a derecha, pero nosotros debemos imprimir
slo los elementos del arreglo a[] que son significativos, es decir, a partir del
primero distinto de 0 que se encuentre en el recorrido de izquierda a derecha.
As que, respondiendo a tu pregunta, ste es un programa completo, en donde
aparecen mtodos y clases. Gurdalos en el mismo directorio, compila y
ejecuta.
Saludos.
Responder
2.

Annimo28 de mayo de 2013, 19:56


Lo ms fcil es hacer esto:

public static void main(String[] args) throws IOException {

int Num, res;


int maxDivisor=1073741824; //Mximo factor divisorio entero
int maxEntero=2147483647; //Mximo numero entero que se puede ingresar
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
Num = Integer.parseInt(in.readLine());
System.out.print("El equivalente binario de "+Num+" es: ");
while (maxDivisor>0)
{
res = Num / maxDivisor;
System.out.print(res);
Num = Num % maxDivisor;
maxDivisor = maxDivisor / 2;
}
System.out.println("\n-Fin del Programa-");
}
Responder
3.

Annimo28 de mayo de 2013, 19:59


Lo ms fcil es hacer esto:

public static void main(String[] args) throws IOException {

int Num, res;


int maxDivisor=1073741824; //Mximo factor divisorio entero
int maxEntero=2147483647; //Mximo numero entero que se puede ingresar
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Ingrese un numero: ");
Num = Integer.parseInt(in.readLine());
System.out.print("El equivalente binario de "+Num+" es: ");
while (maxDivisor>0)
{
res = Num / maxDivisor;
System.out.print(res);
Num = Num % maxDivisor;
maxDivisor = maxDivisor / 2;
}
System.out.println("\n-Fin del Programa-");
}
Responder

{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{

Ejercicio 04: Sea n un entero positivo. Si n es par, divdalo entre 2, sino lo es,
multiplquelo por 3 y smele 1. Realice este proceso hasta que el nmero que alcance
sea 1. Realice un programa en C que implemente dicho proceso. Imprima los
nmeros que van obteniendo. Por Ejemplo: Para n = 10 la sucesin generada es: 10 5
16 8 4 2 1

#include <iostream>
#include <stdlib.h>
using namespace std;
int main(int argc, char *argv[]) {
int n;
do{
cout<<"Ingrese N numero entero positivo: ";
cin>>n;
}while(n<=0);
cout<<"Sucesion generada es: ";
while(n!=1)
{
cout<<n<<"; ";
if(n%2==0)
n=n/2;
else
n=3*n+1;
}
cout<<"1 n"<<endl;

system("pause");
return 0;
}

- See more at: http://enriqueincioch.azurewebsites.net/practica-04-procesos-


repetitivos-for-do-while-while-zinjai-c/#sthash.IfMQumxd.dpuf

You might also like