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:
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);
}
}
gracias por esto
ResponderEliminarDisculpa no tienes el codigo de binario a decimal?
ResponderEliminarScanner sc = new Scanner(System.in); HAY UN ERROR EN ESTA LINEA DE CODIGO...
ResponderEliminarAmig@ para: Scanner sc=new Scanner(System.in);
Eliminaragrega: import java.util.Scanner; o en su defecto
import java.util.*;
no es Scanner nc = new Scanner(System.in);
Eliminarno hay ningun error esta bien pero te falta importarlo a java.util.Scanner =)
Eliminarimport java.util.Scanner;//para poder usar el Scanner con cualquier tipo de
Eliminar//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
NO TENEMOS PROFRESORA QUE NOS EXPLIQUE XD
Eliminaryo tampoco
Eliminarse puede hacer esto en html????
ResponderEliminarEn 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
Eliminarcual es la funcion de la variable exp?
ResponderEliminarCuando 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...
Eliminarmiren esto: http://desarrolloenjava.blogspot.com/2013/09/convertidor-decimal-binario.html
ResponderEliminarHola! 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!
ResponderEliminarHola man, pudiste averiguar tu consulta del Math.pow ?? Llevo buen rato pero no lo entiendo muy bien.
EliminarSi ya lo sabe, te agradecería que lo compartas.
Gracias de antemano :)
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)
ResponderEliminarCuando sea 1, al realizar de nuevo la división entre 2 el cociente será 0 y el bucle while finaliza.
EliminarMuchisimas gracias. lo hice un metodo en C# y me quedo asi
ResponderEliminarpublic 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();
}
Alguien podrìa explicarme este còdigo: binario = binario + digito * Math.pow(10, exp);
ResponderEliminar???
Hola Aleee Rom:
Eliminarla 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.
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...
EliminarNo 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. >:|
Eliminar-Starlord961
Tiene un error: los número binarios salen al revés.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarEste es mi aporte modificado:
ResponderEliminarimport 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);
}
}
Hola a todos,
ResponderEliminarMe podrían ayudar como rellenar con ceros a la izquierda para que siempre de nueve bits.
De antemano muchas gracias.
Buenas;
ResponderEliminarAntes 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");
}
}
me puede ayudar cn un codigo para small basic de convertir un numero a binario
ResponderEliminarporfa puede enviarlo a mi correo te lo agradecer mucho alvaradobanv@gmail.com
alvaradobazanv@gmail.com
Eliminarese ees
Recién estoy aprendiendo, pero yo lo hice así:
ResponderEliminarPD: 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);
}
}
Porfavor alguien sabe que signifca o como funciona esto %.0f %n
ResponderEliminarAsi lo hice yo y me funciono perfectamente
ResponderEliminarpublic 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);
}
}
import java.util.*;
ResponderEliminarpublic 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);
}
}
Modificación del ejemplo anterior, para determinar la cantidad de digitos para el bucle for y prescindir de eliminar los 0 sobrantes.
ResponderEliminarimport 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);
}
}
public void decimal_Binario(){
ResponderEliminarScanner 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);
}
import java.util.Scanner;
ResponderEliminarpublic 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());
}
}
public class decimalBinario {
ResponderEliminarpublic 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);
}
}
Este comentario ha sido eliminado por el autor.
ResponderEliminardisculparme para números grandes esta mal, le pone un dos, lo pone el 8 o un 5.
ResponderEliminarmejor 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
//Decimal a binario
ResponderEliminarimport 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));
}
}
Una pregunta, como puedo convertir los primeros treinta numeros a binarios.
ResponderEliminarmuchas gracias, esto es lo que buscaba.
ResponderEliminar