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

Hier sind ein paar richtig nette Features, die dich beim Java lernen unterstützen

Java lernen Eclipse

Was ist das Wichtigste beim Einstieg in ein neues Wissensgebiet? Nein, kein gutes Sachbuch oder ein besonders guter Lehrer. Es ist Spaß. Beim Java Lernen brauchst du Spaß. Es gibt Lehrer, welche ihren Stoff so vermitteln, dass Lernen Spaß bereitet. Aber die Grundvoraussetzung ist und bleibt der Spaß. Und nichts ist so spaßhemmend wie Langeweile […]

Java Übung 25 – Simuliere eine Gelddruckmaschine

Java Übung Gelddruckmaschine

In dieser Java Übung geht es um Schleifen. Und zwar möchte ich, dass du eine virtuelle Geldruckmaschine erstellst. Was meine ich damit? Du gibst in der Konsole einen x-beliebigen Betrag ein und das Programm gibt dir virtuelle Geldscheine zurück. Ein Beispiel: Du gibst die Zahl 400 ein. Dann liefert dir das Programm 2 x 200 […]

Ein Java Fenster erzeugen mit dem JFrame

Java-Fenster-erzeugen

Ein Java Fenster erzeugen mit Swing. Java Swing – was ist das? Zum Erstellen von grafischen Benutzeroberflächen, kurz GUI, bietet Java eine eigene Standardklasse an. Diese Klasse nennt sich Swing. Aus dieser Swing-Klasse heraus können Objekte erstellt werden. Diese Objekte lassen sich in vier verschiedene Kategorien einteilen. Fenster und Dialoge bilden das Grundgerüst einer grafischen […]

So lassen sich aus Java Klassen Instanzen erstellen

Java Klassen Instanzen erstellen

Lass uns jetzt aus den Java Klassen heraus Objekte anlegen. Im Einführungsbeispiel hast du bereits gelernt, wie du: Instanzvariablen bzw. Attribute anlegst Wie du aus einer normalen Java Klasse eine Programmstart Klasse machst In diesem Artikel erfährst du: Was Objekte bzw. Instanzen sind. Wie sich Objekte zusammensetzen. Wo und wie du Instanzen aus Java Klassen […]

Java Objekte leben auf dem Heap

Java-Objekte-Heap

Java hat eine interne Speicherverwaltung. Eigentlich ist es nicht nur eine. Es sind mehrere.   Uns interessieren nur zwei. Methoden und lokale Variablen werden auf dem Stack verwaltet. Und die Speicherverwaltung für Java Objekte und den Instanzvariablen findet auf dem Heap statt.   Ja wieso braucht Java eigentlich zwei Speichersysteme?   Es ist ganz einfach. […]

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 kannst du deine Java Methoden ausführen

Java Methoden ausführen

Du hast die ersten Java Methoden erstellt. Doch wie greifst du jetzt auf diese zu? Wie kannst du diese Methoden in einer anderen Klassen aufrufen? Welcher Unterschied, hinsichtlich des Methodenaufrufes, besteht eigentlich zwischen deinen Java Methoden? Diese Fragen möchte ich gern in diesem Beitrag beantworten. Gehen wir dazu in den Garten und schauen uns Blumen […]

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 […]

So nutzt du die While Schleife in deinem Java Programm

Java While Schleife

Manchmal ist es wichtig, Dinge einmal öfter zu tun. Bei der Java Programmierung kann es schonmal sein, dass du einen Code mehrfach ausführen lassen musst. Zum Beispiel die Zahlen eins bis zehn. Ein Java Programm, welches die Zahlen eins bis zehn wiedergibt. Na wie wäre das? Der Java Code dazu würde so aussehen: public class […]

Java Übung 27 – Auf zur Mathe-Olympiade

Java Übung Mathe Olympiade

In dieser Java Übung möchte ich mit dir ein Programm erstellen, welches ein Mathematik-Test oder eine Mathe-Olympiade simuliert. Du kennst das vielleicht noch aus der Schule. Matheolympiade- Da wurden aus allen vier Grundrechenarten, Aufgaben formuliert. Die Schüler mussten diese Aufgaben lösen. Die Lehrer kontrollierten die Lösungen. Und der Schüler, welcher die wenigsten Fehler hatte – […]