java

Java – Convertir Binario a Decimal (algoritmo)

En este artículo explicaré 2 maneras de convertir un número binario a un número decimal en Java; es decir, convertir de base 2 (binario) a base 10 (decimal).

El primer método es recorriendo la cadena y haciendo las operaciones que se harían manualmente; o sea que lleva más trabajo.

La segunda manera indica cómo usar un método que ya viene en la API de Java listo para convertir binario a decimal sin esfuerzo. Veremos ambas.

Binario a decimal: método fácil

Como lo dije, ya existe un método en Java que hace esto. Como queremos una gran precisión usamos el tipo de dato long para convertir números binarios aunque sean grandes.

La clase Long tiene un método estático llamado parseLong que recibe una cadena y la base de dicha cadena. Basta con llamarlo y pasarle el número binario con la base, que es 2.

Aquí la sintaxis:

long numeroDecimal = Long.parseLong(numeroBinarioComoCadena, 2);

Al final veremos algunos ejemplos.

Algoritmo para convertir binario a decimal

Explicación del algoritmo

El segundo método es un algoritmo más desarrollado. Recorremos el número binario dígito por dígito, obteniendo un 1 o un 0.

Multiplicamos ese dígito por un multiplicador (qué redundancia, lo sé) que será el resultado de elevar el 2 a una potencia dada por el índice en el que vayamos.

Por ejemplo, el número final de la derecha tiene un multiplicador de 1, el penúltimo tiene uno de 2, el antepenúltimo uno de 4 y así sucesivamente.

Si el dígito es 0, al multiplicar seguirá siendo 0; pero si es 1, entonces será el valor que va en esa posición. Al final todo eso se suma en una variable y el resultado es el número decimal.

Código fuente

El código queda así:

public static long convertirBinarioADecimalManual(String binario) {
  // A este número le vamos a sumar cada valor binario
  long decimal = 0;
  int posicion = 0;
  // Recorrer la cadena...
  for (int x = binario.length() - 1; x >= 0; x--) {
      // Saber si es 1 o 0; primero asumimos que es 1 y abajo comprobamos
      short digito = 1;
      if (binario.charAt(x) == '0') {
          digito = 0;
      }

      /*
          Se multiplica el dígito por 2 elevado a la potencia
          según la posición; comenzando en 0, luego 1 y así
          sucesivamente
       */      double multiplicador = Math.pow(2, posicion);
      decimal += digito * multiplicador;
      posicion++;
  }
  return decimal;
}

De igual manera se utiliza un tipo de dato long para soportar números grandes.

Probar conversión binaria a decimal

Ahora veamos a los dos métodos expuestos en acción. He creado un código en donde se prueba a ambos y se imprime el valor que regresa cada uno. Aquí está:

/**
 * 2 maneras de convertir números binarios a decimales en Java
 * 
 * @author parzibyte
 */class Main {
 public static void main(String[] args) {
  String[] binarios = { "000000", // 0
    "000001", // 1
    "10", // 2
    "101", // 5
    "1111", // 15
    "1111111111", // 1023
  };
  for (String binario : binarios) {
   System.out.println("Convirtiendo binario a entero el número " + binario);
   System.out.println("Manual: " + convertirBinarioADecimalManual(binario));
   System.out.println("Usando funciones: " + convertirBinarioADecimal(binario));
  }
 }

 public static long convertirBinarioADecimalManual(String binario) {
  // A este número le vamos a sumar cada valor binario
  long decimal = 0;
  int posicion = 0;
  // Recorrer la cadena...
  for (int x = binario.length() - 1; x >= 0; x--) {
   // Saber si es 1 o 0; primero asumimos que es 1 y abajo comprobamos
   short digito = 1;
   if (binario.charAt(x) == '0') {
    digito = 0;
   }

   /*
    * Se multiplica el dígito por 2 elevado a la potencia según la posición;
    * comenzando en 0, luego 1 y así sucesivamente
    */   double multiplicador = Math.pow(2, posicion);
   decimal += digito * multiplicador;
   posicion++;
  }
  return decimal;
 }

 public static long convertirBinarioADecimal(String binario) {
  return Long.parseLong(binario, 2);
 }
}

Si quieres probar el código puedes descargarlo y probarlo en un IDE, te recomiendo NetBeans.

Lee más sobre Java en mi blog.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Servidor HTTP en Android con Flutter

El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…

3 días hace

Imprimir automáticamente todos los PDF de una carpeta

En este post te voy a enseñar a designar una carpeta para imprimir todos los…

4 días hace

Guía para imprimir en plugin versión 1 desde Android

En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…

1 semana hace

Añadir tasa de cambio en sistema de información

Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…

2 semanas hace

Comprobar validez de licencia de plugin ESC POS

Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…

2 semanas hace

Imprimir euro € en impresora térmica

Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…

3 semanas hace

Esta web usa cookies.