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

Java Methoden mit variabler Argumentenanzahl – VarArgs

Java Methoden mit variabler Argumentenanzahl VarArgs

Du kennst das noch. Kopfrechnen und zwar auf Zeit. So etwas ist das Standardprogramm in den Schulklassen 1 bis 5. Irgendwann, in Klasse 6 oder 7, kommt der Taschenrechner ins Spiel und Kopfrechnen ist aus dem Schulalltag gestrichen. Schade eigentlich. Dabei kann man diese Disziplin auch wunderbar in kleinen Spielen unterbringen. Ich erinnere mich noch: […]

Java Übung 24 – So kannst du Kommazahlen runden

Java Übung runden

In dieser Java Übung möchte ich mit dir Zahlen runden. Ich bitte dich deshalb: Erstelle eine Klasse „RundenUebung“. Lege dann eine statische Methode rundeZahl() an. Diese erwartet zwei Parameter. Parameter 1 ist die Kommazahl, welche gerundet werden soll. Als zweiten Parameter wird eine ganze Zahl übergeben, welche die Nachkommastelle – bis auf welche letztlich gerundet […]

Java Übung 16 – Bestimme den größten gemeinsamen Teiler

Java Übung Teiler

In dieser Java Übung möchte ich, dass du den größten gemeinsamen Teiler zwei Zahlen ermittelst. Ich möchte, dass du das Ganze mit einer while-Schleife umsetzt. Und wie? Du legst eine neue Klasse „GGT“ (größter gemeinsamer Teiler) an. In diese Klasse implementierst du eine Klassenmethode „berechneGGT“. Diese erwartet zwei Argumente vom Datentyp Integer.

Nutze die Fernbedienung für deine Java Objekte

Auf Java Objekte greifst du mit einer Art Fernsteuerung zu. Diese bezeichnet man als Referenz oder als Verweis. Und diese Referenzvariablen möchte ich dir jetzt einmal vorstellen. Doch bevor wir loslegen, lass mich noch ein paar Dinge loswerden. 🙂 Ich habe es ja schon einmal in einem früheren Beitrag erwähnt. Java unterscheidet zwischen primitiven und […]

Der wichtige Unterschied zwischen Java Methoden

Java Methoden Unterschied

Jetzt machen wir Nägel mit Köpfen. Dieses Sprichwort stammt aus den Anfängen des Industriezeitalters. Denn früher wurden Nägel nicht industriell, sondern per Hand gefertigt. Und da kam es schon einmal vor, dass versehentlich Nägel ohne Kopf produziert wurden. Was blieb ist das Sprichwort „Nägel mit Köpfen“ Und dieses steht sinngemäß für eine schnelle, qualitativ hochwertige […]

10 ganz nützlichen Feature der Klasse Java Math

In diesem Beitrag geht es um eine spezielle Java Klasse. Die Klasse nennt sich Java Math. Diese ist in der Standardbibliothek von Java enthalten. Warum solltest du diese Klasse kennen? Die Math Klasse bietet dir einen Menge Methoden an, welche zur Berechnung von mathematischen Gleichungen ganz hilfreich sind. Aber auch für Nichtmathematiker ist etwas dabei. […]

Die vier verschiedenen Zahlensysteme in der Java Programmierung

Java Zahlensysteme

Java Zahlensysteme – Was soll das? In sämtlichen Programmiersprachen werden Zahlen in Variablen abgespeichert. Wenn du dir die einzelnen primitiven Datentypen in Java einmal anschaust – wirst du feststellen – dass die Masse der Datentypen Zahlen annehmen und speichern können. Zahlen und die Mathematik dahinter spielen in der Programmierung eine sehr große Rolle. Ganz am […]

Java Übung 18: Berechne die Fakultät

Java Übung Fakultät

In dieser Java Übung geht es um die Fakultät aufeinander folgender Zahlen. Für alle, bei denen der Mathe-Unterricht genauso lange her ist, wie bei mir: 🙂 Die Fakultät ist das Produkt aufeinander folgender natürlicher Zahlen. Zum Beispiel: Die Fakultät von 2 ist: 1*2=2 Die Fakultät von 5 ist: 1*2*3*4*5=120 So – ich hoffe, dass ich […]

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