Pasar un número de binario a decimal en Java

Convertir un número de binario a decimal en Java

El programa para pasar un número expresado en binario a decimal se basa en la forma tradicional de hacerlo. Los dígitos del número binario ocupan una posición que se numera de derecha a izquierda empezando por cero. La posición del dígito más a la derecha es la 0.

Numero Binario:
1
1
0
1
0
1
Posición que ocupa cada dígito
5
4
3
2
1
0

Para pasar el número a decimal se multiplica cada dígito binario por 2 elevado a la posición que ocupa. La suma de todos los productos es el equivalente en decimal.

/*
* Programa Java que convierte un número binario a decimal
*/
import java.util.Scanner;

public class BinarioDecimal {

  public static void main(String[] args) {
    long numero, aux, digito, decimal;
     int exponente;
     boolean esBinario;
     Scanner sc = new Scanner(System.in);

    //Leer un número por teclado y comprobar que es binario
     do {
          System.out.print("Introduce un numero binario: ");
          numero = sc.nextLong();
          //comprobamos que sea un número binario es decir
          //que este formado solo por ceros y unos
          esBinario = true;
          aux = numero;
          while (aux != 0) {
                     digito = aux % 10; //última cifra del números
                     if (digito != 0 && digito != 1) { //si no es 0 ó 1
                          esBinario = false; //no es un número binario
                     }
                     aux = aux / 10; //quitamos la última cifra para repetir el proceso                           
           }
      } while (!esBinario); //se vuelve a pedir si no es binario

      //proceso para pasar de binario a decimal
      exponente = 0;
      decimal = 0; //será el equivalente en base decimal
      while (numero != 0) {
                //se toma la última cifra
                digito = numero % 10;
                //se multiplica por la potencia de 2 correspondiente y se suma al número                          
                decimal = decimal + digito * (int) Math.pow(2, exponente);
                //se aumenta el exponente
                exponente++;
                //se quita la última cifra para repetir el proceso
                numero = numero / 10;
      }
      System.out.println("Decimal: " + decimal);
   }
}

18 comentarios:

  1. Respuestas
    1. Me alegro de que te haya sido útil Antonio

      Eliminar
    2. Enrique puedes ayudarme por favor

      Tengo este código

      /*
      * To change this license header, choose License Headers in Project Properties.
      * To change this template file, choose Tools | Templates
      * and open the template in the editor.
      */
      package numeron;

      /**
      *
      * @author estudiantes
      */
      public class Entero {
      //atributos
      private byte bits[];
      private byte cantidad = 64;

      /**
      Constructor 1
      * inicializa el arreglo de tamaño cantidad.
      * @param n
      * n pertenece a [1,64]
      * valor por defecto es 64
      */
      public Entero(byte n){
      if(n >= 1 && n <= 64){
      cantidad = n;
      }
      bits = new byte[cantidad];
      }


      /**
      * @param numeroDecimal
      * Número decimal para ser convertido a binario
      *
      * @param representacion4
      * Esquema de representación binaria.
      * 0 Sin signo
      * 1 Con Singo
      * 2 Complemento a 1
      * 3 Complemento a 2
      * El esquema por defecto es complemento a 2
      */
      public Entero(int numeroDecimal, int representacion4){
      //Inserte el código aquí
      }

      /**
      returna el número como cadena de bits
      *
      * @return num
      * desde el bit más significativo hacia el menos signficativo
      */
      @Override
      public String toString(){
      String num = "";
      for(int i=bits.length - 1; i>=0; i--){
      num += bits[i];
      }
      return num;
      }
      }

      Y debo hacer esto:
      *Agregar el constructor Entero que permita inicializar el arreglo con un número decimal en el esquema de representación binaria seleccionado.*
      ¿Podrías ayudarme por favor, Gracias

      Eliminar
  2. Muchas gracias por el Curro.

    Yo aqui dejo la solución que encontrado antes de mirar el resultado del Blog.

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

    public class Test {

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

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

    int n, p, q, y;

    Scanner sc = new Scanner(System.in);

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

    n = sc.nextInt();
    String x = Integer.toString(n);

    p = 0;
    y=x.length()-1;

    do {
    q=n/(int)Math.pow(10,(y));
    n=n%((int)Math.pow(10,(y)));
    y=y-1;
    p=(p*2)+q;
    } while (y>=0);

    System.out.println("el nùmero binario en decimal es: " + p);

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

    }
    }

    Salüt

    ResponderEliminar
  3. hola por favor ayuda quisiera pasar un numero pero con decimales a otro sistema de numeracion por ejemplo 2A6.E3 a binario o a decimal por favorrr es urgente ayudaaaa

    ResponderEliminar
  4. logrado ya quedan pocos por hacer. comparto mi codigo :) saludos.

    import javax.swing.*;
    public class _5_11_Decimal_A_binario {
    /*binario a decimal en java*/

    public static void main(String[] args) {
    String txt = JOptionPane.showInputDialog("Ingrese el codigo binario");
    double suma=0;
    System.out.println();
    for(int v =0; v<txt.length();v++){

    int c2 = Integer.parseInt(""+ txt.charAt(v));

    if(c2==1){
    suma = suma + Math.pow(2, v);
    }

    }
    int sumafinal = (int) suma;
    System.out.println("El numero binario "+txt+" a decimal es : "+sumafinal);

    }
    }

    ResponderEliminar
  5. import java.util.Scanner;
    public class BinarioADecimal {


    public static void main(String[] args) {


    String strBinario;
    char vecBinario[];
    int intBinario, posicionElevada, strLargo, digito;
    double aux;
    String mensajeError = "Numero binario NO VALIDO";
    String mensaje1 = "Ingrese un numero binario";
    Scanner in = new Scanner(System.in);
    intBinario=0;
    aux=0;


    boolean band;

    do{
    System.out.println(mensaje1);

    strBinario = in.nextLine();
    strLargo = strBinario.length();
    vecBinario = new char[strLargo];

    //Verificamos el ingreso que sea binario
    for (int i=0; i<strLargo; i++){
    vecBinario[i]=strBinario.charAt(i);

    }

    band = false;
    for (int j=0; j<strLargo; j++){
    if (vecBinario[j] != '1' && vecBinario[j]!= '0'){

    System.out.println(mensajeError);
    j=strLargo;
    band = true;

    //en caso de que si...
    } else {
    aux = Math.pow(2, (strLargo-1-j)); //auxiliar para potencia
    posicionElevada = (int) aux; // lo paso a integer para que pueda ser compatible
    digito = vecBinario[j]-'0'; // paso chart a int
    intBinario = intBinario + digito*posicionElevada; // hago la operacion para conseguir el decimal
    band = false;

    }
    }

    }while (band == true);
    System.out.println(intBinario);

    in.close();



    }
    }

    ResponderEliminar
  6. System.out.prnt(Este blog esta super chido, muchas gracias);
    }
    }
    }

    ResponderEliminar
    Respuestas
    1. Gracias por el comentario Valentin. Espero que sigas visitándolo y que te sea útil.

      Eliminar
  7. Teniendo en cuenta el desafío que se extiende en el Libro: Cómo programar en Java, comparto mi código. Ha sido un placer analizar la respuesta de cada uno de ustedes.

    package ejercicios;
    import java.util.Scanner;

    public class ImprimirEquivalenteDecimalDeNumeroBinario4_31
    {

    public static void main(String[] args)
    {
    Scanner entrada = new Scanner(System.in); // utilizo un objeto escaner para obtener datos del usuario

    int numero = 0;; // variable que almacena el numero ingresado
    int auxiliar = 0; // variable que almacena el numero ingresado y utiliza su valor para diversos calculos
    int cantDigitos = 0; // variable que almacena la cantidad de digitos del numero
    int digito = 0; // variable que almacena el valor de un digito
    int constante = 2; // variable que se usa en reemplazo de la potencia, para los calculos de conversion de binario a decimal
    int resultadoParcialDecimal = 0; // variable que almacena la suma de las potencias de los digitos
    int correcto = 0; // variable que se utiliza para verificar si el numero ingresado es binario

    // Algoritmo que pide nuevamente ingreso del usuario si el numero no es binario
    while (correcto == 0) // si el numero no es binario...
    {
    System.out.println("Ingrese un numero entero Binario (solo debe contener unos y/o ceros): "); // pide ingreso de usuario
    numero = entrada.nextInt(); // ingreso el numero (cuando excedo el numero de 10 digitos, lanza un error)
    auxiliar = numero; // comparto el valor para calculos auxiliares

    // algoritmo para saber si el numero es binario
    while (auxiliar != 0) // mientras a "auxliar" le queden cifras
    {
    digito = auxiliar % 10; // guardo el ultimo digito de la derecha

    if (digito == 0 || digito == 1) // si el digito es binario...
    {
    auxiliar = auxiliar / 10; // quito el último dígito de la derecha y almaceno el resto del numero
    correcto = 1; // si todos los digitos son binarios el numero es binario y no debe pedirse otro ingreso
    }

    else // si al menos un digito no es binario
    { auxiliar = 0; // salgo del algoritmo para saber si el numero es binario
    correcto = 0; // vuelvo al algoritmo para ingresar numero
    }
    }
    }

    auxiliar = numero; // si el numero es binario restablezco valor y uso auxiliar para la conversion

    // algoritmo para separar digitos de un numero binario y calcular su equivalente decimal

    while (auxiliar != 0) // mientras a "auxliar" le queden cifras
    {
    digito = auxiliar % 10; // guardo el ultimo digito (de la derecha)

    auxiliar = auxiliar / 10; // quito el último dígito de la derecha y almaceno el resto del numero

    cantDigitos++; //sumamos 1 al contador de digitos

    if (cantDigitos == 1) // condicion para calculo del primer digito (de la derecha)
    resultadoParcialDecimal = digito * 1;

    if (cantDigitos == 2) // condicion para calculo del segundo digito (de la derecha)
    resultadoParcialDecimal += digito * constante;

    if (cantDigitos >= 3) // condicion para calculo a partir del tercer digito (de la derecha) en adelante
    {
    constante += constante; // elevo 2
    resultadoParcialDecimal += digito * constante;
    }

    }
    // Muestro resultado :)
    System.out.println("El numero binario '" + numero + "' equivale a '" + resultadoParcialDecimal + "' en sistema decimal");
    // Me costó mucho tratando de utilizar solo los conceptos de los capitulos vistos previamente en Cómo programar en Java - Deitel...
    }
    }

    ResponderEliminar
  8. Les comparto mi solución :D

    import java.util.Scanner;

    public class BinarioDecimal {

    public static void main(String[] args) {

    long bin=0, num=0;
    String bins="";
    char dig=' ';
    boolean binario=false;

    Scanner sc=new Scanner(System.in);

    System.out.print("Ingrese numero binario: ");
    bin=sc.nextLong();

    bins=String.valueOf(bin);

    for (int i=0; i<bins.length(); i++) {
    if (bins.charAt(i)=='0' || bins.charAt(i)=='1') {
    binario=true;
    }else {
    binario=false;
    }
    }

    if (binario) {
    for (int i=0; i<bins.length(); i++) {
    dig=bins.charAt(i);
    num=num+Long.parseLong(String.valueOf(dig))*(int)Math.pow(2,bins.length()-(i+1));;
    }

    System.out.println("Numero: " + num);
    }else{
    System.out.println("El numero ingresado no es Binario");
    }
    }
    }

    ResponderEliminar
  9. alguien que pueda hacer este mismo ejercicio pero en lenguaje C

    ResponderEliminar
  10. public static long Binario_A_Decimal(String f){
    long valor = 0;
    for (int i = 1,j=f.length()-1; j>=0; i*=2,j--) {
    if (f.charAt(j)=='1') {
    valor +=i;
    }
    }
    return valor;

    }

    ResponderEliminar
  11. Buenas noches. Me estoy iniciando en programación. Me ayudan con este ejercicio. gracias. Tengo que utilizar arreglo.

    Escriba un programa que lee un numero binario de 8 bits, lo almacene en un vector, lo
    convierta a formato decimal y lo muestre en pantalla.

    ResponderEliminar
  12. class java {

    public static void main(String[] args) {
    boolean b_binaria[];
    b_binaria = new boolean[8];
    // 01010101
    b_binaria[0]=false;
    b_binaria[1]=true;
    b_binaria[2]=false;
    b_binaria[3]=true;
    b_binaria[4]=false;
    b_binaria[5]=true;
    b_binaria[6]=false;
    b_binaria[7]=true;

    int dec=0;
    for (int i = 7; i >= 0; i--) {

    System.out.println(b_binaria[i] +" , "+ i);
    if (b_binaria[i]==true) {

    dec=dec + (int) Math.pow(2, 7-i);
    }
    }

    System.out.println(dec);
    }

    }

    ResponderEliminar
  13. Alguien me podria ayudar en este programa en java
    Elaborar una clase con los métodos que estime convenientes para pedir una cantidad en binario, la convierta a decimal y a octal. Finalmente se imprima en el monitor la cantidad tanto en binario, decimal y octal. (Utilizar cajas de dialogo).

    ResponderEliminar