Binärzahlen beliebiger länge

Status
Nicht offen für weitere Antworten.

Binary

Mitglied
Ich habe folgendes Programm geschrieben. Es rechnet Dezimalzahlen in Binärzahlen um. Die Ausgegebene Zahl stimmt zwar (laut Windows Taschenrechner), aber er setzt immer Nullen vor die Zahl (klar, liegt an der Schleife i<10). Wie kann ich das Programm umschreiben, um mir beliebig lange Binärzahlen auszugeben, also auch mehr als 10 Stellen und weniger als 10 Stellen, OHNE, dass er mir die Binärzahl mit Nullen verlängert?

Code:
public class DeziDual

{

	public static int[] Dezidual (int Dezi)

	{

		
		int Stelle=10;
		int Dual[] = new int[Stelle];
		
		for (int i=0; i<10; i++)
		{
			Dual[i]=Dezi%2;
			Dezi=Math.round(Dezi/2);
		}
				
		return Dual;

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

	{

		InputStreamReader Input = new InputStreamReader(System.in);
		BufferedReader DataIn = new BufferedReader(Input);
		
		int Dezi=0;
		int Stellen=0;
		int Dual[] = new int[Stellen];
		String Dualzahl="";
		
		System.out.println("Bitte geben sie einen Integer-Wert an.");
		Dezi=Integer.parseInt(DataIn.readLine());
		
	
		Dual=Dezidual(Dezi);
		
		for (int i=0; i<Dual.length; i++)

		{

			Dualzahl=Dual[i]+Dualzahl;

		}
		
		System.out.println("Der Binaerwert der Zahl ist: " + Dualzahl);

	}

}
 
Gabs da nicht mal so eine Formel, etwa:

Code:
int stellen = (int)Math.log( dual ) / Math.log( 2 ) + 1;

:?:

mfg Beni

P.S. anstelle von Dezi=Math.round(Dezi/2); kann man einfacher Dezi >>= 1; schreiben (rechter Bitshiftoperator).
 
das geht auch leichter man kann mit
Code:
Integer.toBinaryString()
einen Integerwert in einen Binärzahl schreiben das geht auch mit Oktal und Hexa Zahlen 😉
 
um näher an deiner lösung zu bleiben:
zahl -> string daraus
durchläufe -> aus der länge des strings
 
Code:
public static int[] Dezidual (int Dezi) 

   { 

       
      int Stelle=10; 
      int Dual[] = new int[Stelle]; 
       
      for (int i=0; i<10; i++) 
      { 
         Dual[i]=Dezi%2; 
         Dezi=Math.round(Dezi/2);//wie schafst du es einen übergabeparameter von typ int ( Dezi )zu verendern?!
      } 
             
      return Dual; 

   }
wie schafst du es einen übergabeparameter von typ int ( Dezi )zu verendern?!
 
inwiefern verändern?

meinst du umwandeln in nen anderen typ?
ganz normal typcasting oder es geht teilweise sogar direkt (zb int to double)
 
Also ich hab zufällig soetwas kürzlich geschrieben, nur gebe ich einen Stringwert zurück, da die Binärzahl ja sehr lange werden kann

Falls dich interessiert:

Code:
public class Dez2Bin
{
    public Dez2Bin()
    {
    }
    
    public String wandle(int dez)
    {
        int i=0, rest, ergebniss;
        String[] binary = new String[20];
        String temp="";
        
           ergebniss=dez;
           do
           {   
               rest=ergebniss%2;
               ergebniss = ergebniss / 2;
               
               binary[i]=rest+"";
                              
               i++;
           }
           while(ergebniss != 0);
           
           for(int t=i-1; t>=0; t--)
           {
                temp+=binary[t];
           }
           
           return temp;
       }
}
 
Hier mal eine speicherfreundlichere Lösung (in Bezug auf Manfreds Lösung). Das ganze String - anfügen ist nicht sehr speicherfreundlich, da die String Klasse final ist und somit immer für jedes Anhängen ein neues Objekt intern generiert wird --> für sowas IMMER die Klasse StringBuffer nehmen, die ist da flexibler (außerdem hat sie ne reverse Methode *g*) !

Code:
public String wandle2(int dez) {
    StringBuffer b = new StringBuffer();
    int rest;

    do {
        rest = dez % 2;
        dez = dez / 2;
	
        b.append(rest);
    }
    while(dez != 0);
    
    return b.reverse().toString();
}
 
Aha, nicht schlecht, jetzt weiss ich wenigstens was mein Lehrer meinte, als er sagte, dass String nicht so gut ist und wir bald etwas anderes durchnehmen....
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben