Decimal a binario en java

En esta entrada vamos a escribir el programa java para convertir un número de decimal a binario.

Para escribir el programa nos vamos a basar en la forma clásica de pasar de decimal a binario, o sea, dividir el número entre 2 y quedarnos con el resto de la división. Esta cifra, que será un cero o un uno, es el dígito de menos peso (más a la derecha) del número binario. A continuación volvemos a dividir el cociente que hemos obtenido entre 2 y nos quedamos con el resto de la división. Esta cifra será la segunda por la derecha del número binario. Esta operación se repite hasta que obtengamos un cero como cociente.


De forma gráfica lo vamos a ver mucho más claro:

Si queremo convertir el número 12 en binario haremos las siguientes operaciones:


El número 12 en decimal es el 1100 en binario. El número binario se obtiene tomando los restos en orden inverso a como se han obtenido.

Los que ya sabéis algo de Java podeis pensar que para qué quiero hacer ese programa si simplemente escribiendo la instrucción:

System.out.println(Integer.toBinaryString(numero));

se mostrará el número en binario. 
El método toBinaryString de la clase Integer ya me hace el trabajo, pero se trata de que seamos capaces de desarrollar por nosotros mismos el algoritmo que realiza la conversión de decimal a binario.

Este ejercicio se suele plantear cuando se está comenzando a aprender las estructuras repetitivas (while, for, do while) y aún no se conocen los arrays por lo que la solución que se plantea no utiliza arrays y por tanto esta solución aunque es correcta solo es válida para números enteros relativamente pequeños.


/**
 * Programa que pasa un número

 * de decimal a binario
 * @author Enrique García
 */

public class Main{

    public static void main(String[] args) {

        int numero, exp, digito;
        double binario;
        Scanner sc = new Scanner(System.in);

        do{ 
            System.out.print("Introduce un numero entero >= 0: ");
            numero = sc.nextInt();
        }while(numero<0);

        exp=0;
        binario=0;
        while(numero!=0){
                digito = numero % 2;           
                binario = binario + digito * Math.pow(10, exp);  
                exp++;
                numero = numero/2;
        }
        System.out.printf("Binario: %.0f %n", binario);
    }
}


23 comentarios:

  1. Disculpa no tienes el codigo de binario a decimal?

    ResponderEliminar
  2. Scanner sc = new Scanner(System.in); HAY UN ERROR EN ESTA LINEA DE CODIGO...

    ResponderEliminar
    Respuestas
    1. Amig@ para: Scanner sc=new Scanner(System.in);
      agrega: import java.util.Scanner; o en su defecto
      import java.util.*;

      Eliminar
    2. no es Scanner nc = new Scanner(System.in);

      Eliminar
    3. no hay ningun error esta bien pero te falta importarlo a java.util.Scanner =)

      Eliminar
  3. Respuestas
    1. En su caso debería utilizar un lenguaje del lado del servidor... JSP le sirve para eso y es JAVA, por lo que si es posible usarlo junto con HTML

      Eliminar
  4. Respuestas
    1. Cuando elevas 10 a una potencia, por ejemplo a la 1 es 10, a la 2 es 100 a la 3 es 1000, si los sumaras te daría algo como : 1110... te va dando la secuencia binaria...

      Eliminar
  5. miren esto: http://desarrolloenjava.blogspot.com/2013/09/convertidor-decimal-binario.html

    ResponderEliminar
  6. Hola! Me re sirvió!! Graciass!!! Aun así no entiendo porque se concatenan los Números y se ordenan del Ultimo al Primero al poner "Math.pow()" (Tal vez sea una regla matemática que no sepa..) Pero por favor si alguien me podría aclarar, ya que lo hice con un Do..While normal y ademas de salirme no concatenados, sino en columna, también me salen del Primero al Ultimo. Desde ya, Gracias!

    ResponderEliminar
    Respuestas
    1. Hola man, pudiste averiguar tu consulta del Math.pow ?? Llevo buen rato pero no lo entiendo muy bien.
      Si ya lo sabe, te agradecería que lo compartas.
      Gracias de antemano :)

      Eliminar
  7. int num = 0, i=0;

    Scanner leer = new Scanner(System.in);
    System.out.println("ingresa un numero");
    num = leer.nextInt();

    while(i < num){
    if(num % 2 == 0){
    System.out.print( 0 );
    }else{
    System.out.print( 1 );
    }
    num = num / 2;
    }

    ResponderEliminar
  8. No tiene por qué llegar a 0 el número, puede que el siguiente número sea un 1 (si es impar por ejemplo), por lo que no saldría nunca del bucle while (num!=0)

    ResponderEliminar
  9. Muchisimas gracias. lo hice un metodo en C# y me quedo asi

    public string regresarBinario(int n1)
    {
    string respuesta;
    int exp, digito;
    double binario;
    exp = 0;
    binario = 0;
    while (n1 != 0)
    {
    digito = n1 % 2;
    binario = binario + digito * System.Math.Pow(10, exp);
    exp++;
    n1 = n1 / 2;
    }

    respuesta = binario.ToString();
    }

    ResponderEliminar
  10. Alguien podrìa explicarme este còdigo: binario = binario + digito * Math.pow(10, exp);
    ???

    ResponderEliminar
    Respuestas
    1. Hola Aleee Rom:

      la variable binario almacenara el dato final, pero recordemos que lo que esta después del signo igual, es la operación que realizará el ordenador o el programa. Respetando la precedencia de valores es decir, respetando el orden en las que se realizan las operaciones por medio de los signos, donde en este caso la primer operación será la potencia después ese resultado lo multiplicara por la variable digito y finalmente la sumara al valor que contenga la variable binario.

      por tanto:

      Math.pow(10,exp) --> es una formula matemática donde Math.pow es un método(el 10 es la base,es el valor de la variable exp, que significa el exponente, por ejemplo si quisieras elevar 2^3, entonces te quedaría --> Math.pow(2,3)
      Una vez que se calcula este valor se recorre al siguiente signo entonces realiza la multiplicación de Math.pow con la variable digito.
      Después todo ese resultado lo suma a la variable binario
      y finalmente almacena el valor en la variable binario.

      Que pudiera ser también otra variable, pero al hacer uso de la misma variable nos permite ahorrarnos variables, pues en este caso necesitamos que se vayan sumando en esa misma los valores.

      Espero haber sido explícita, saludos

      Y el código es bueno y como lo mencionan efectivamente solo le falta la línea de la librería principal es decir la librería que permite que se pueda hacer uso del Scanner.
      Yo utilicé
      import java.util.Scanner;
      esta linea al inicio de todo el código.



      Eliminar
    2. Que buen y valioso aporte Jacky y por ello se le agradece enormemente. Ojalá pueda mantener para siempre ese espíritu de colaboración, que seguro le traerá mucha satisfacción en tu vida...

      Eliminar
  11. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  12. Este es mi aporte modificado:

    import static java.lang.System.out;
    import java.util.*;

    public class ProgramaDePrueba {
    public static void main(String[] args) {
    int n, r;
    Scanner sc = new Scanner(System.in);
    do{
    String b="";
    out.println("Introduzca un número.");
    n = sc.nextInt();
    while(n!=0){
    r = n % 2;
    b = r + b;
    n/=2;
    }
    out.println("El binario es: " + b +"\n");
    }while(n==0);
    }
    }

    ResponderEliminar