Skip to main content

2 Möglichkeiten mit Java eine Dezimalzahl in eine Binäre Zahl umzuwandeln

In einem der letzten Beiträge habe ich dir gezeigt, wie du eine Dualzahl in eine Dezimalzahl umwandelst.

Diesmal geht es in die andere Richtung.
Eine Dezimalzahl soll in eine binäre Zahl umgerechnet werden.

Doch zuvor….
Beginnen wir bei den theoretischen Grundlagen beider Zahlensysteme.

Jede Dezimalzahl lässt sich mit der Restwertmethode aufsplitten.

Denn jede Dezimalzahl lässt sich mit dem Faktor 10 bilden.

Was soll das heißen?
Nimm eine x-beliebige Zahl. Zum Beispiel 425.
Teile diese durch 10.

  • Falls die letzte Stelle der Zahl eine Null ist – also 10, 100, 1000 usw. – lässt diese Zahl sich glatt, ohne Rest teilen.
  • Wenn die letzte Stelle aber keine Null sein sollte, ergibt sich immer ein Rest.

So wie hier…
425 geteilt durch 10 wäre dann 42 und Rest 5.
Wieso Rest 5?
Kehre die Division einmal um. 42*10=420
Es bleibt somit eine Differenz von 5 über. (425-420=5 ).

Okay, warum erzähl ich das?
Schau mal dieses Bild an.

Java-Dezimalzahl-in-Binäre-Zahl-umwandeln

Denn jetzt kannst du das Ergebnis der ersten Gleichung nach unten ziehen.
Und dann die 42 ebenfalls durch 10 teilen.
Dies ergibt dann 4 und Rest 2.

Danach teilst du wieder das Ergebnis, in diesem Fall 4 durch 10.
Dies wäre dann 0 und ein Rest von vier.
Ende – bei Ergebnis 0 ist immer Schluss.

Hier nochmal das Bild.

Java-Dezimalzahl-in-Binäre-Zahl-umwandeln

Jetzt lies die einzelnen Restwerte einmal von unten nach oben.
Dort steht 4, 2 und 5 bzw. 425.
Und das war unsere ursprüngliche Zahl, welche sich durch Restwerte herbeileiten lässt.

Cooler Zaubertrick, oder?
Lässt sich wahrscheinlich mit Tuch, schicken Zauberstab und stimmungsvoller Musik ganz gut ausbauen
Damit kannst du so manchen Zuschauer in Erstaunen versetzen. 🙂

Falls du das vorhast, wären hier ein paar nette Utensilien.

Ne, Scherz beiseite.
Das funktioniert mit jeder Zahl.
Grundlage ist die 10 – da das Dezimalsystem 10 Ziffern hat. (0-9)

Und genauso wandelst du eine Dezimalzahl in eine Binäre Zahl um.

Der einzige Unterschied ist, dass das Duale Zahlensystem lediglich aus 2 Zahlen besteht.
Im Normalfall sind es 1 und 0.
Somit dividierst du durch 2, anstatt durch 10.

Also dann…
Die Zahl 425 wäre als Dualzahl – 110101001

java dezimalzahl in binäre zahl umrechnen

  • 425/2=212 Rest 1
  • 212/2=106 Rest 0
  • 106/2=53 Rest 0
  • 53/2=26 Rest 1
  • 26/2=13 Rest 0
  • 13/2=6 Rest 1
  • 6/2=3 Rest 0
  • 3/2=1 Rest 1
  • 1/2 = 0 Rest 1

Und dann lies die Restwerte wieder von unten nach oben.
Die Zahl 425 in binärer Schreibweise lautet somit: 110101001.

Jetzt lass uns den Java Dezimal Dualzahl Umrechner bauen

Also was brauchst du?
Zuerst eine Klasse, mit der du den Programmstart vollziehen kannst.

public class JavaDualzahl {
	

	public static void main(String[] args) {
		
	}
}

Wie schon im Beitrag zur „Binär-in-Dezimal-Umrechnung“ verwende ich die Klasse „JavaDualzahl“.
Die Methode wandleBinInDez(), welche ich in diesem Beitrag verwendete – blende ich jetzt aus.
Dadurch wird es für dich übersichtlicher.

Denn….
Du benötigst für diese Umwandlung wieder eine ganz neue statische Methode.
Ich nenne diese wandleDezInBin() und rufe diese wieder zum Programmstart auf.

public class JavaDualzahl {
	
	static void wandleDezInBin(){

	}

	public static void main(String[] args) {
		wandleDezInBin();//Statische Methode kann ohne Objekt aufgerufen werden
	}
}

Was passiert jetzt in der Methode?
Als erstes soll eine Bildschirmeingabe die Dezimalzahl entgegen nehmen.
Also brauchst du ein Scanner-Objekt.

import java.util.Scanner;//Importanweisung für den Scanner

public class JavaDualzahl {
	
	static void wandleDezInBin(){
		Scanner eingabe = new Scanner(System.in);//Scanner zur Speicherung der Eingabe
		System.out.println("Bitte gib eine Dezimalzahl ein!");//Aufforderung zur Eingabe
		
		int dezZahl = eingabe.nextInt();//Eingabe wird gespeichert

	}

	public static void main(String[] args) {
		wandleDezInBin();//Statische Methode kann ohne Objekt aufgerufen werden
	}
}

Die Variable „dezZahl“ speichert dann deine eingegebene Dezimalzahl.

Außerdem brauchst du eine Schleife, welche die Restwerte Schritt-für-Schritt bildet.
Da die Anzahl der Durchläufe unbekannt ist, solltest du eine while-Schleife oder do-while-Schleife benutzen.

Die Schleifenbedingung lautet ungleich Null.

Denn innerhalb der Schleife soll jetzt die übergebene Dezimalzahl – solange durch 2 geteilt werden – bis diese Null ist.
Hier nochmal das Bild zur Verdeutlichung.

java dezimalzahl in binäre zahl umrechnen

Also dann….
Die Schleifenbedingung lautet: Dezimalzahl ungleich Null.
Hier der Java Code:

import java.util.Scanner;//Importanweisung für den Scanner

public class JavaDualzahl {
	
	static void wandleDezInBin(){
		Scanner eingabe = new Scanner(System.in);//Scanner zur Speicherung der Eingabe
		System.out.println("Bitte gib eine Dezimalzahl ein!");//Aufforderung zur Eingabe
		
		int dezZahl = eingabe.nextInt();//Eingabe wird gespeichert
		
		while(dezZahl != 0){
			
		}

	}

	public static void main(String[] args) {
		wandleDezInBin();//Statische Methode kann ohne Objekt aufgerufen werden
	}
}

Im Schleifenrumpf wird die Dezimalzahl in eine Dualzahl umgewandelt.

Und deshalb wird immer wieder durch 2 dividiert.

import java.util.Scanner;//Importanweisung für den Scanner

public class JavaDualzahl {
	
	static void wandleDezInBin(){
		Scanner eingabe = new Scanner(System.in);//Scanner zur Speicherung der Eingabe
		System.out.println("Bitte gib eine Dezimalzahl ein!");//Aufforderung zur Eingabe
		
		int dezZahl = eingabe.nextInt();//Eingabe wird gespeichert
		
		while(dezZahl != 0){
			dezZahl=dezZahl/2;//Ergebnis wird durch 2 dividiert
		}

	}

	public static void main(String[] args) {
		wandleDezInBin();//Statische Methode kann ohne Objekt aufgerufen werden
	}
}

Du brauchst aber zur Dualzahl-Bestimmung die Restwerte.
Und deshalb musst du diese mit dem Modulo-Operator berechnen.

import java.util.Scanner;//Importanweisung für den Scanner

public class JavaDualzahl {
	
	static void wandleDezInBin(){
		Scanner eingabe = new Scanner(System.in);//Scanner zur Speicherung der Eingabe
		System.out.println("Bitte gib eine Dezimalzahl ein!");//Aufforderung zur Eingabe
		
		int dezZahl = eingabe.nextInt();//Eingabe wird gespeichert
		
		while(dezZahl != 0){
			System.out.print(dezZahl % 2);//Ausgabe der Restwerte
			dezZahl=dezZahl/2;//Ergebnis wird durch 2 dividiert
		}

	}

	public static void main(String[] args) {
		wandleDezInBin();//Statische Methode kann ohne Objekt aufgerufen werden
	}
}

Klicke auf „RUN“ und los geht’s.
Gib die Dezimalzahl 425 ein und du bekommst die Zahl 100101011 zurück.

Jetzt bekommst du die Binärzahl genauso präsentiert, wie wir sie schon mathematisch bestimmt haben.
Doch leider in umgekehrter Reihenfolge.

Die Reihenfolge der Ziffern kann nicht verändert werden, da diese nirgendwo gespeichert sind.

Somit müsstest du entweder:

  • Mit diesem Ergebnis leben und die Zahlen gedanklich umkehren
  • Oder irgendwie – irgendwo die Ziffern speichern.
    Zum Beispiel in einem Array.

Du kannst die Dezimalzahl auch mit for-Schleifen und einem Arrays in eine Dualzahl umwandeln.

Meine Idee dazu:

  • Eine while Schleife bestimmt die Stellenanzahl der zu errechnenden Binärzahl
  • Dann nimmt eine for-Schleife diese Stellenanzahl entgegen und füllt ein Array mit den Zahlen der errechneten Dualzahl.
  • Eine zweite For-Schleife durchläuft das Array von hinten nach vorn und gibt die binäre Zahl in richtiger Reihenfolge zurück.

Klingt gut?
Okay – machen wir.

Zuerst die while Schleife, welche die Anzahl der Stellen bestimmen soll.
Also benötigst du erst einmal eine Variable, welche die Stellenanzahl speichert.
Meine Variable heißt „anzahlStellen“ mit dem Startwert 0.


import java.util.Scanner;//Importanweisung für den Scanner

public class JavaDualzahl {
	
	static void wandleDezInBin(){
		Scanner eingabe = new Scanner(System.in);//Scanner zur Speicherung der Eingabe
		System.out.println("Bitte gib eine Dezimalzahl ein!");//Aufforderung zur Eingabe
		
		int dezZahl = eingabe.nextInt();//Eingabe wird gespeichert
		int anzahlStellen=0;//Anzahl der Stellen der Dualzahl
		int dezZahlZwei=dezZahl;//Kopie der Zahl, da am Ende der while-Schleife die Zahl Null ist
		
		/*
		 * While Schleife soll die Anzahl der Stellen bestimmen
		 */
		while (dezZahlZwei != 0){
			dezZahlZwei=dezZahlZwei / 2;//Zahl wird solange durch 2 dividiert bis 0 herauskommt
			anzahlStellen++;//Erhöhung der Zählvariablen
		}
		
	}
	
	public static void main(String[] args) {
		wandleDezInBin();//Statische Methode kann ohne Objekt aufgerufen werden
	}
}

Die Schleifenbedingung lautet wieder: „Dezimalzahl ungleich Null.“

Im Schleifenrumpf wird dann die übergebene Dezimalzahl – immer wieder durch 2 geteilt.
Und zwar solange bis die Dezimalzahl Null ist und die Schleife abbricht.

Außerdem wird die Zählvariable für die Stellenanzahl bei jedem Schleifendurchlauf um Eins erhöht.

Was du beachten musst….
Sobald die while-Schleife komplett durchlaufen wurde, ist die eingebebene Dezimalzahl Null.

Du kannst somit diese Zahl („dezZahl“) nicht weiter verwenden.
Stattdessen musst du im Vorfeld eine Kopie anfertigen, welche du dann weiter verwendest.
In unserem Beispiel nannte ich diese: „dezZahlZwei“.

Jetzt legst du ein Array an, welches die einzelnen Ziffer der Binärzahl speichern soll.

Die Länge des Arrays entspricht dem Wert, welcher in der Zählvariable „anzahlStellen“ gespeichert ist.


import java.util.Scanner;//Importanweisung für den Scanner

public class JavaDualzahl {
	
	static void wandleDezInBin(){
		Scanner eingabe = new Scanner(System.in);//Scanner zur Speicherung der Eingabe
		System.out.println("Bitte gib eine Dezimalzahl ein!");//Aufforderung zur Eingabe
		
		int dezZahl = eingabe.nextInt();//Eingabe wird gespeichert
		int anzahlStellen=0;//Anzahl der Stellen der Dualzahl
		int dezZahlZwei=dezZahl;//Kopie der Zahl, da am Ende der while-Schleife die Zahl Null ist
		
		/*
		 * While Schleife soll die Anzahl der Stellen bestimmen
		 */
		while (dezZahlZwei != 0){
			dezZahlZwei=dezZahlZwei / 2;//Zahl wird solange durch 2 dividiert bis 0 herauskommt
			anzahlStellen++;//Erhöhung der Zählvariablen
		}
		
		int zahlen[] = new int [anzahlStellen];//Array mit Länge der Zählvariablen

	}
	
	public static void main(String[] args) {
		wandleDezInBin();//Statische Methode kann ohne Objekt aufgerufen werden
	}
}

Okay und jetzt die erste for- Schleife.
Diese soll das Array mit den Ziffern der Binärzahl füllen.
Für diese brauchen wir die Variable „dezZahl“.
Hättest du nicht die Kopie „dezZahlZwei“ angefertigt, würdest du jetzt den Wert 0 an die Schleife übergeben.


import java.util.Scanner;//Importanweisung für den Scanner

public class JavaDualzahl {
	
	static void wandleDezInBin(){
		Scanner eingabe = new Scanner(System.in);//Scanner zur Speicherung der Eingabe
		System.out.println("Bitte gib eine Dezimalzahl ein!");//Aufforderung zur Eingabe
		
		int dezZahl = eingabe.nextInt();//Eingabe wird gespeichert
		int anzahlStellen=0;//Anzahl der Stellen der Dualzahl
		int dezZahlZwei=dezZahl;//Kopie der Zahl, da am Ende der while-Schleife die Zahl Null ist
		
		/*
		 * While Schleife soll die Anzahl der Stellen bestimmen
		 */
		while (dezZahlZwei != 0){
			dezZahlZwei=dezZahlZwei / 2;//Zahl wird solange durch 2 dividiert bis 0 herauskommt
			anzahlStellen++;//Erhöhung der Zählvariablen
		}
		
		int zahlen[] = new int [anzahlStellen];//Array mit Länge der Zählvariablen
		
		/*
		 * For Schleife füllt das Array mit den Restwerten
		 */
		for (int i = 0; i < anzahlStellen; i++){ 
                        zahlen[i]=dezZahl % 2; //Speichern der Restwerte im Array
                        dezZahl = dezZahl / 2; //Die Zahl wird immer wieder durch 2 dividiert
                    } 

	}
	
	public static void main(String[] args) {
		wandleDezInBin();//Statische Methode kann ohne Objekt aufgerufen werden
	}
}

Zwei Worte zur For-Schleife.- Eigentlich ja 4 Worte 🙂

  1. Die Schleife beginnt bei i =0 und somit auch beim Arrayfach Null: zahlen[0].
  2. Die Schleifen-Abruchbedingung lautet i < anzahlStellen. Also wird die Schleife solange durchlaufen bis die letzte Ziffer im Array gespeichert ist. Im Falle von 425 bzw. 110101001 wäre dies 9-mal. 9 Ziffern, also neun Durchläufe.
  3. Nach jedem Durchlauf erhöht sich i um 1. (i++).
    Somit wird im ersten Durchlauf das Fach zahlen[0] und im zweiten Durchlauf das Fach zahlen[1] – usw. gefüllt.
  4. Im Schleifenrumpf wird das Array wiederum mit den Restwerten aus der Division gefüllt.

So das Array ist gefüllt.
Die Ziffern der Dualzahl sind immer noch verkehrt herum.
Deshalb brauchst du jetzt wiederum eine for-Schleife, welche die Fächer von hinten nach vorne ausliest und dann den Inhalt zurückgibt.


import java.util.Scanner;//Importanweisung für den Scanner

public class JavaDualzahl {
	
	static void wandleDezInBin(){
		Scanner eingabe = new Scanner(System.in);//Scanner zur Speicherung der Eingabe
		System.out.println("Bitte gib eine Dezimalzahl ein!");//Aufforderung zur Eingabe
		
		int dezZahl = eingabe.nextInt();//Eingabe wird gespeichert
		int anzahlStellen=0;//Anzahl der Stellen der Dualzahl
		int dezZahlZwei=dezZahl;//Kopie der Zahl, da am Ende der while-Schleife die Zahl Null ist
		
		/*
		 * While Schleife soll die Anzahl der Stellen bestimmen
		 */
		while (dezZahlZwei != 0){
			dezZahlZwei=dezZahlZwei / 2;//Zahl wird solange durch 2 dividiert bis 0 herauskommt
			anzahlStellen++;//Erhöhung der Zählvariablen
		}
		
		int zahlen[] = new int [anzahlStellen];//Array mit Länge der Zählvariablen
		
		/*
		 * For Schleife füllt das Array mit den Restwerten
		 */
		for (int i = 0; i < anzahlStellen; i++){ 
                        zahlen[i]=dezZahl % 2; //Speichern der Restwerte im Array
                        dezZahl = dezZahl / 2; //Die Zahl wird immer wieder durch 2 dividiert
                    } 

               /* 
                * Die zweite for-Schleife liest das Array von hinten nach vorne 
                */ 
                for (int i = anzahlStellen - 1; i >= 0; i--){
			System.out.print(zahlen[i]);
		}
	}
	
	public static void main(String[] args) {
		wandleDezInBin();//Statische Methode kann ohne Objekt aufgerufen werden
	}
}

Fertig.- Probiere es aus!

Schauen wir uns auch diesen Schleifenkopf etwas genauer an.

Die Variable „i“ entspricht jetzt der „anzahlStellen“ bzw. der Länge des Arrays.
Denn du startest schließlich von hinten – vom letzten Fach.
Und deshalb solltest du das Startfach wissen.

Wieso „anzahlStellen-1“ und nicht nur „anzahlStellen„?
Das erste Fach ist das Nullerfach – zahlen[0].
In unserem Beispiel mit 425 bzw. 110101001 – wären dies 9 Stellen.
Aber diese neun Ziffern sind in den Fächern zahlen[0] bis zahlen[8].

Kommen wir zur Abbruchbedingung: i >= 0.
Die Schleife läuft rückwärts. Deshalb auch i—.
Und wenn i = 0 ist – dann ist die Schleife im letzten Fach angekommen und kann abbrechen.

Im Schleifenrumpf wird das komplette Array vom letzten bis zum ersten Fach durchlaufen und der Inhalt wird zurückgegeben.

Zusammenfassung:

  • Um eine Dezimalzahl in eine Dualzahl umzurechnen, musst du lediglich die Dezimalzahl „glatt“ durch 2 dividieren.
    Das Ergebnis ziehst du dann nach unten und rechnest wieder durch 2.
  • Das machst du solange, bis das Ergebnis Null ist.
  • Bei jeder dieser Gleichungen entsteht ein Restwert – 0 oder 1.
  • Die Zusammenfassung aller Restwerte von hinten nach vorn – ist dann die Dualzahl.
  • Um in Java eine Dezimalzahl in eine Dualzahl umzuwandeln, benötigst du den Modulo Operator und diesen lässt du solange durch eine Schleife laufen – bis das Teilergebnis auch wieder Null ist.
  • Da du die Restwerte speichern solltest, um diese zum Schluss umkehren zu können – benötigst du eine for-Schleife und ein Array.

Falls du mehr über Binärzahlen oder Dezimalzahlen erfahren willst, besuche die Übersichtsseite zu den Zahlensystemen.


Ähnliche Beiträge

So kannst du in den Java Klassen Attribute anlegen

Java Klassen Attribute

Die bisherigen Java Klassen in unserem Einführungsbeispiel besitzen noch keine Attribute. Das ändern wir und legen diese jetzt an. In diesem Beitrag erfährst du: Warum Variablen in deinen Klassen eine entscheidende Rolle spielen. Was es bedeutet eine Variable zu deklarieren. Wo du Attribute in den Java Klassen anlegen darfst und wo nicht. Wie du durch […]

So kannst du in drei einfachen Schritten Java Arrays dynamisch vergrößern

Java Arrays vergrößern

Es ist der 31.März 1727. Es ist ein Montag. Die Welt nimmt Abschied von einem sehr bedeutenden Weltveränderer. Seine Sichtweisen beeinflussen, heute noch, die Forschung und Entwicklung im Bereichen der Physik und Chemie. Ja selbst unser aller Leben – unsere Sicht auf die alltäglichen Dinge – wurden durch seine Denkstöße revolutioniert. Dieser große Vorreiter starb […]

Java for Schleifen schachteln – So funktioniert es

Java For Schleifen schachteln

Diese Situation kennst du doch auch…. Du stehst an der Haltestelle und wartest auf den Bus. Dein Blick fällt auf die Uhr.   Oder du wartest an der Ecke auf deinen Freund oder Kollegen. Immer wieder schaust du auf deine Uhr.   Sie ist kaum noch wegzudenken. Die mobile Taschenuhr.   Lange Zeit wurde die […]

Der Java Datentyp boolean im Interview

Java boolean

Nein, ich bin nicht verrückt. Aber… Neulich traf ich zufällig den Java Datentyp boolean. 🙂 Er erklärte sich bereit, mir ein Interview zu geben. In diesem Interview geht es um die Werte, welcher dieser Wertetyp annehmen kann. Und in diesem Zusammenhang geht es auch um Logik. Also lassen wir uns doch die Logik vom direkten […]

So lassen sich Java Arrays kopieren

Java Arrays kopieren

Java Arrays kopieren oder klonen…. Was heißt das eigentlich? Eine Kopie ist eine Reproduktion bzw. die Nachbildung eines Originals. Somit ist jede Fotographie – die Abbildung einer bestimmten optischen Wirklichkeit, zu einem festen Zeitpunkt. Die Kopie einer Buchseite ist das optische Abbild dieser spezifischen Buchseite – auch zu einem festen Zeitpunkt. Wichtig in diesem Zusammenhang […]

Overriding und Vererbung – So lassen sich Java Methoden überschreiben

Java Methoden überschreiben

In Deutschland entstehen jeden Tag tolle Geschichten. So wie diese hier…. Die größte Turmuhr der Welt, die Makkah Clock, steht in Saudi – Arabien. Und zwar direkt in Mekka. Hier ein paar Eckdaten zur Uhr: Höhe des Turmes 601 m. Das Ziffernblatt der Turmuhr hat einen Durchmesser von 43 Meter Die Länge des Minutenzeigers beträgt […]

So kannst du dein Java Programm mit der main Methode ausführen

Auf zum ersten Java Programm. Vielleicht fragst du dich jetzt gerade: Na, was haben wir denn bisher gemacht? War das etwa kein Java Programm? Wir haben bisher nur eine Klasse „Human“ für ein zuküntfiges Mensch-Objekt erstellt. Diesem Objekt haben wir eine Instanzvariable, namens size (Größe) zugeordnet. Und wir haben eine Instanzmethode, namens grow (wachsen) geschrieben. […]

Den Java Vererbungsbaum nach dem Ist-Es-Prinzip richtig entwerfen

Java Vererbungsbaum

Vererbungsbaum in Java – klingt erstmal komisch. Dennoch wird dies so bezeichnet. Gemeint sind damit – die einzelnen Hierarchiestufen oder Vererbungsebenen – von der Superklasse bis runter zu den Kindklassen. Wie sieht das nun konkret aus? Vererbung bedeutet: Du definierst einen allgemeinen Typen – zB. Möbel Und dann implementierst du eine Unterklasse, welche die Oberklasse […]

Das Java Vererbung Konzept in einem Rollenspiel

Java ist eine objektorientierte Programmiersprache. Und das bedeutet nicht nur, dass du Objekte einer Java Klasse erzeugen kannst. Es bedeutet auch, dass Java Klassen von anderen Klassen erben können. Wieso das Ganze? Stell dir einmal ein Rollenspiel vor. Wie würdest du ein Rollenspiel entwerfen? In einem Rollenspiel gibt es magische Gegenstände. Zauberringe, Zauberstäbe, welche bei […]

Java Exklusives Oder – So nutzt du den Xor Operator

Java exklusives oder

In diesem Beitrag möchte ich dir den Xor Operator von Java vorstellen. Dieser Operator wird auch als ausschließendes oder exklusives Oder bezeichnet. Ein Beispiel: Was wilst du heute zum Mittag essen: Fleisch oder Fisch? Auf diese Frage gibt es nur eine Antwort. Es ist entweder Fisch oder Fleisch. Niemals beides. Das Eine schließt das andere […]