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);
    }
}

43 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
    4. import java.util.Scanner;//para poder usar el Scanner con cualquier tipo de
      //dato.

      class ejemplo{
      Scanner sc =new Scanner(System.in);

      int lector(){
      int n = 0;
      n = sc.nextInt(); //next.charAt(i)para caracteres,next() para
      //cadenas 'n' debe ser del mismo tipo d lo q
      //envias o recibis.
      return n;
      }//del lector

      public static void main(String args[]){
      int num;
      ejemplo obj = new ejemplo();//
      num = obj.lector();
      System.out.println("Soy num :"+ num);
      }//del main
      }//del class ejemplo

      Eliminar
    5. NO TENEMOS PROFRESORA QUE NOS EXPLIQUE XD

      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. cual es la funcion de la variable exp?

    ResponderEliminar
    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. 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
    Respuestas
    1. Cuando sea 1, al realizar de nuevo la división entre 2 el cociente será 0 y el bucle while finaliza.

      Eliminar
  8. 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
  9. 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
    3. No me sirvió de nada, perdí puntos por tu culpa, ojalá que un día tu sientas lo mismo que yo en este momento, te odio. >:|
      -Starlord961

      Eliminar
  10. Tiene un error: los número binarios salen al revés.

    ResponderEliminar
  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
  13. Hola a todos,

    Me podrían ayudar como rellenar con ceros a la izquierda para que siempre de nueve bits.

    De antemano muchas gracias.

    ResponderEliminar
  14. Buenas;

    Antes de nada agradecer el trabajo en este blog. A mí me parece es un trabajo fantástico.

    He resuelto a mi manera el ejercicio y me gustaría que alguien me explicara las diferencias con la solución del blog (el uso de Maht.pow vs i=10*i). y Cual serían las ventajas y desventajas de una y otra...

    thanks


    > Resultado:

    package Practica;

    import java.io.*;
    import java.util.*;

    public class Test {

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

    System.out.println("10. Pasar de decimal a binario.\n");
    System.out.println("Solución:\n");

    int n, d, i, suma;

    i=1;
    suma = 0;
    Scanner sc = new Scanner(System.in);

    System.out.print("Entrar el nùmero decimal para convertir en binario: ");
    n = sc.nextInt();

    do {
    d = n % 2;
    suma=suma+(d*i);
    i = 10*i;
    n = n / 2;
    } while (n >= 1);

    System.out.print(suma);

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

    }
    }

    ResponderEliminar
  15. me puede ayudar cn un codigo para small basic de convertir un numero a binario
    porfa puede enviarlo a mi correo te lo agradecer mucho alvaradobanv@gmail.com

    ResponderEliminar
  16. Recién estoy aprendiendo, pero yo lo hice así:
    PD: ando utilizando JOption por costumbre en las practicas : )

    import javax.swing.JOptionPane;
    /**
    * Decimal a Binario
    * @author A. Paris
    */
    public class DecimalBinario {
    public static void main(String[] args) {
    int n=Integer.parseInt(JOptionPane.showInputDialog("Ingrese numero"));
    int res=n%2, a=1;
    while (n/2>0){
    n=n/2;
    a=a*10;
    res=res+(n%2)*a;
    }
    JOptionPane.showMessageDialog(null,"En binario es: "+res);
    }

    }

    ResponderEliminar
  17. Porfavor alguien sabe que signifca o como funciona esto %.0f %n

    ResponderEliminar
  18. Asi lo hice yo y me funciono perfectamente



    public class deDecinalA_Binario {

    public static void main(String args[]) {

    Scanner sc=new Scanner(System.in);
    int num,res=0;
    int dig;
    String cadena=" ",cadena2="";
    System.out.println("Ingrese un numero: ");
    num=sc.nextInt();





    while(num/2!=0) {

    cadena=cadena+Integer.toString(num%2);
    //System.out.print(num%2+" ");
    num=num/2;

    if(num==1) cadena=cadena+"1";// System.print(1);

    }



    for(int i=cadena.length()-1;i>=0;i--) {

    cadena2=cadena2+cadena.charAt(i);

    }



    System.out.print(cadena2);





    }



    }

    ResponderEliminar
  19. import java.util.*;

    public class Program
    {
    public static void main(String[] args) {
    Scanner entrada=new Scanner(System.in);

    int decimal=entrada.nextInt();

    System.out.print(decimal + " en binario es: ");

    String cadena="";

    for(int i=decimal; i>=0; i--){

    if(Math.pow(2,i)<=decimal){
    cadena=cadena+"1";
    decimal-=Math.pow(2,i);
    }else{
    cadena=cadena+"0";
    }
    }
    String cadenafinal=cadena.replaceFirst ("0*", "");
    System.out.println(cadenafinal);

    }
    }

    ResponderEliminar
  20. Modificación del ejemplo anterior, para determinar la cantidad de digitos para el bucle for y prescindir de eliminar los 0 sobrantes.

    import java.util.*;

    public class Program
    {
    public static void main(String[] args) {
    Scanner entrada=new Scanner(System.in);

    int decimal=entrada.nextInt();

    int numero=decimal;

    int digitos=0;

    while(numero!=1){
    digitos++;
    numero/=2;
    }

    //String cadena="";

    for(int i=digitos; i>=0; i--){

    if(Math.pow(2,i)<=decimal){
    //cadena=cadena+"1";
    System.out.print("1");
    decimal-=Math.pow(2,i);
    }else{
    System.out.print("0");
    //cadena=cadena+"0";
    }
    }
    //String cadenafinal=cadena.replaceFirst ("0*", "");
    //System.out.println(cadenafinal);

    }
    }

    ResponderEliminar
  21. public void decimal_Binario(){

    Scanner sn = new Scanner(System.in);
    int decimal, aux;

    System.out.println("Ingresa un numero entero");

    decimal= sn.nextInt();
    String binario ="";
    while(decimal!=0){

    aux= decimal%2;
    binario = aux + binario;
    decimal /= 2;

    }
    System.out.println(binario);

    }

    ResponderEliminar
  22. import java.util.Scanner;

    public class DecimalBinario {

    public static void main(String[] args) {

    long num, bin;
    String nums="";

    Scanner sc=new Scanner(System.in);

    System.out.print("Ingrese numero a pasar a binario: ");
    num=sc.nextLong();

    System.out.print("El numero " + num);
    while(num!=0){
    bin=num%2;
    num=num/2;
    nums=nums+bin;
    }

    StringBuilder cad=new StringBuilder(nums);

    System.out.print(" en binario es: " + cad.reverse());
    }
    }

    ResponderEliminar
  23. public class decimalBinario {
    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.println("Ingrese un número en el sistema decimal positivo");
    int numero = scanner.nextInt();
    String binario = " ";// para almacenar los restos
    if (numero > 0) { //NUMERO INGRESADO ES MAYOR A CERO
    while (numero > 0) {
    if (numero % 2 == 0) {//12 es multiplo de dos?...
    binario = "0" + binario; // si va cero
    } else {
    binario = "1" + binario;
    }
    numero = numero / 2;//lo divido por dos
    }
    } else if (numero == 0) {
    binario = "0";
    } else {//NUMERO INGRESADO MENOR A CERO
    binario = "No se pudo convertir el numero. Ingrese solo números positivos";
    }
    System.out.println("El número convertido a binario es: " + binario);
    }
    }

    ResponderEliminar
  24. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  25. disculparme para números grandes esta mal, le pone un dos, lo pone el 8 o un 5.

    mejor el resultado del residuo de la división, poner en un string y evítate la multiplicación, por múltiplos de 10.

    entrada:
    1695455

    salida:
    Binario: 110011101111011020000
    String _ :110011101111011011111

    saludos

    ResponderEliminar
  26. //Decimal a binario
    import java.util.*; //Añade utilidades a nuestro código
    import java.io.IOException;

    public class MyClass {
    public static void main(String args[]) {

    Scanner lector = new Scanner(System.in); //Utilidad de interacció

    System.out.println("Ingresar un numero:"); //Utilidad para escribir en pantalla
    int n1 = lector.nextInt(); //nextInt recupera un valor entero desde teclado
    lector.nextLine();

    int r=0,c=0;
    double p=0;
    do{
    n1 = n1 / 2;
    r = n1 % 2;
    c = c + 1;
    p = p + Math.pow(10,c) * r;
    }while(n1 != 0);

    System.out.println("En binario: "+ (int)(p));
    }
    }

    ResponderEliminar
  27. Una pregunta, como puedo convertir los primeros treinta numeros a binarios.

    ResponderEliminar
  28. muchas gracias, esto es lo que buscaba.

    ResponderEliminar