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 Übung 11 – Java Objekte in Java Methoden übergeben

Java Übung Java Methoden Objekte

In dieser Java Übung möchte ich dir zeigen, dass du auch in Klassenmethoden auf Objekte und deren Instanzvariablen zugreifen kannst. Schau dir dazu einmal diesen Java Code an. public class Umwandlung { private int x; public int getX() { // getter Methode return x; } public void setX(int x) { // setter Methode this.x = […]

So kannst du Java installieren

Java installieren

Bevor du loslegst und deine ersten Java Programme schreibst, benötigst du die entsprechende Arbeitsumgebung. Du solltest also Java installieren. Und diese Arbeitsumgebung beinhaltet dann Bibliotheken für die einzelnen Java-Standard-Klassen, Dateien um deine Programme auszuführen. Dateien um deine Programme zu packen, Logische Verzeichnisstrukturen

Die drei Bestandteile aller Java Klassen

Java Klassen Bestandteile

Java ist eine objektorientierte Programmiersprache. Was heißt das? Ja… Anscheinend hat es etwas mit Objekten zu tun. Also was ist ein Objekt? Ein Objekt ist ein bestimmtes Konstrukt im Programm. Bauen wir ein Spiel. Ein Grafik-Adventure. Du kennst das. Ein Held wird in eine bestimmte Spielwelt hinein gesteckt. Der Held muss mit bestimmten Personen sprechen. […]

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

Beim Aufruf werden Java Methoden auf dem Stack gestapelt

Java Methoden gestapelt

Java Methoden werden beim Aufruf gestapelt. Und jedes Element auf dem Stapel nimmt Speicherplatz weg. Und manchmal ist es so, dass der Stapel richtig hoch wird und dann…. Ja was passiert eigentlich dann? Betrachten wir einmal ein Computerspiel. Irgendeines. In diesem Computerspiel gibt es Vögel, welche abgeschossen werden sollen. Was bedeutet das denn genau? Beim […]

So kannst du zweidimensionale Java Arrays anlegen und nutzen

Java Arrays zweidimensional

Eines der bedeutendsten Instrumente in der Mathematik ist das Koordinatensystem. Die gedankliche Grundlage dieses Werkzeuges lieferte der französische Naturwissenschaftler und Philosoph Rene Descartes. Man muss sich einmal verdeutlichen, was dies für die damalige Zeit bedeutete. Bisher wurden mathematische Probleme lediglich durch Berechnungen gelöst. Denke an geometrische Figuren, wie Dreiecke und Vierecke. Der Umfang wurde lediglich […]

Polymorphie bringt Vorteile für Java Arrays

Java Polymorphie Arrays

Wenn Java Arrays, Schubladen oder Container sein sollen… Dann wäre der Gebrauch einer solchen Schublade ziemlich einseitig und festgefahren. Denn in jedes Array passen zwar mehrere Daten – aber immer nur vom gleichen Datentyp. Immer gleicher Datentyp? Also eine Schublade nur für Socken, Unterwäsche und der ganze andere Kram passt dann eben nicht hinein. Um […]

So lassen sich Java Strings in char zerlegen

Java Strings zerlegen char

Java Strings sind Zeichenketten. Und diese Zeichenketten lassen sich aufsplitten und in ihre Einzelteile zerlegen. Ich möchte dir in diesem Beitrag Möglichkeiten vorstellen, wie du Strings in Character-Datentypen zerlegen, extrahieren und die Einzelteile in Arrays speichern kannst.