Integer als Binärzahl auffassen

babuschka

Top Contributor
Hallo,

ich möchte gerne einen positiven integer Wert in Binärdarstellung haben. Da Java einen integer intern durch eine Binärzahl repräsentiert, dachte ich, dass es da bereits eine Methode in der Standard Java Bibliothek gibt, die einem eine/n Array/Liste liefert gefüllt mit 0er und 1er. Jedoch konnte ich u.a. in der Integer Klasse keine entsprechende Methode finden.

Eine Implementierung selbst vorzunehmen wäre die Alternative. Das ist sicherlich kein großes Problem. Ich hätte nur gerne eine vorimplementierte Methode benutzt, da diese meistens bereits sehr effizient implementiert sind.

Gibt es eine solche Methode bereits?


Schöne Grüße,
Rouven
 

nrg

Top Contributor
wüsste nicht, dass java so eine methode bietet aber der algo ist im Grunde auch keine große Sache.

(quelle: Dualsystem ? Wikipedia)
c1c6f725e216b29741f35c83d2eb7f25.png


einfach durch 2 teilen, Ergebnis merken und Rest anschreiben. allerdings muss dar Rest immer vorne angehängt werden.

hatten das Thema hier schon öfter. könntest ja die SuFu fragen, wenn du jetzt noch Probleme damit hast und nicht weiterkommst. Kannst natürlich auch hier einen Ansatz posten ;)
 

DaveX

Mitglied
Java:
public static String decToBinRecursive(Integer dec, String str){
        return (dec <=1) ? dec.toString()+str :decToBinRecursive(dec/2, new Integer(dec%2).toString()+str);
    }

aufrufen mit ClassenName.decToBinRecursive(Zahl,"");

Es ist eine TailRecursive funktion deshalb 2 Parameter.

ansonsten gibt es eine Methode in der Integer Klasse:
Java:
Integer.toBinaryString(irgendeineIntegerZahl)
 
Zuletzt bearbeitet:

babuschka

Top Contributor
Danke nrg für die schnelle Antwort !

Mh, das ist schade, dass es das nicht bereits gibt. Könnte mir vorstellen, dass so etwas öfter benötigt wird und eine effiziente Implementierung in der Java Bib sollte doch möglich sein. :-/

Schöne Grüße,
Rouven
 

babuschka

Top Contributor
Auch dir danke für die schnelle Antwort DaveX !

Diese toBinaryString Methode hatte ich auch gesehen, allerdings gibt sie einen String aus der mir leider nicht für die Weiterverarbeitung hilft. :-/

Dann werde ich mich also an eine eigene Implementierung machen.
Deine erste Methode eignet sich dafür bereits sehr gut, ist sehr schön kurz.

Schöne Grüße,
Rouven
 

nrg

Top Contributor
@DaveX dein rekursiver Methodenaufruf ist falsch.

aber gut, nachdem wir hier eh schon Komplettlösungen posten, hier noch eine iterative Option mit Liste als return (musst du wissen, ob das Sinn macht. Kannst natürlich auch einen StringBuilder einfügen)

DaveX's seine Lösung geht natürlich auch, wenn man den Methodenaufruf anpasst aber ist ein wenig schwerer nachvollziehbar.

Java:
  public static void main(String[] args) {
	  for (Integer i : dezToBinary(47))
		  System.out.print(i);
  }
  public static List<Integer> dezToBinary(int dez) {
	  List<Integer> binary = new ArrayList<Integer>();
	  while (dez > 0) {
		  binary.add(0, dez%2);
		  dez/=2;
	  }
	  return binary;
  }
 

DaveX

Mitglied
jep habe den Namen der Funktion komischerweise zugeschnitten ;/
aber die Funktion funzt bestens ;D

und ich weiss dass Rekursiv geht meistens schief aber es gibt nichts besseres als tailrecursive lösungen.
Ich wollte nur dass man sich eben mit rekursion vertraut macht ;D
 

babuschka

Top Contributor
@nrg : Danke für den Code.

Ich habe es noch ein wenig verallgemeinert und mir eine Funktion für die Zurückrechnung geschrieben:
Java:
public static List<Integer> decToNumWithBaseB(int n, int b) {
	List<Integer> binary = new ArrayList<Integer>(0);
	while(n > 0) {
		binary.add(0, n % b);
		n /= b;
	}
	return binary;
}
	
public static int numWithBaseBToDec(List<Integer> n, int b) {
	int result = 0;
	int size = n.size();
	for(int i = 0; i < size; i++)
		result += n.get(i) * pow(b, size-i-1);
	return result;
}

(Die verwendete pow Funktion ist eine von mir geschriebene Funktion auf integer Werten).

Dabei muss man beachten, dass der höchstwertigste Koeffizient bei der Codierung in der Liste an Stelle 0 steht.


Eine Frage nebenbei:
nrg, du hast bei deiner Ausgabe
Java:
for (Integer i : dezToBinary(47))
benutzt. Ist es aber bei diesem Schleifenkonstrukt nicht so, dass die Reihenfolge hier nicht gewährleistet wird (was hier aber sehr wichtig ist)? Oder habe ich das falsch in Erinnerung?

Schöne Grüße, Rouven
 

nrg

Top Contributor
Eine Frage nebenbei:
nrg, du hast bei deiner Ausgabe
Java:
for (Integer i : dezToBinary(47))
benutzt. Ist es aber bei diesem Schleifenkonstrukt nicht so, dass die Reihenfolge hier nicht gewährleistet wird (was hier aber sehr wichtig ist)? Oder habe ich das falsch in Erinnerung?

Schöne Grüße, Rouven

das iteriert über die Liste (FiFo Prinzip - edit: http://de.wikipedia.org/wiki/First_In_–_First_Out)

andere schreibweißen:
Java:
	  List<Integer> binary = dezToBinary(47);
	  for (int i = 0; i < binary.size(); i++)
		  System.out.print(binary.get(i));

Java:
	  List<Integer> binary = dezToBinary(47);
	  Iterator<Integer> iter = binary.iterator();
	  while (iter.hasNext())
		  System.out.print(iter.next());
 

nrg

Top Contributor
Versteh nicht, warum du int b mit übergibts. du teilst doch immer durch 2, oder nicht? ausserdem brauchst du keine Methode pow schreiben, die ist bereits in java.lang.Math vorhanden.
Java:
	public static int numWithBaseBToDec(List<Integer> n) {
		int result = 0, j = 1;
		for(Integer i : n)
			result += i*Math.pow((double)2, ((double)n.size()-j++));
		return result;
	}
 

babuschka

Top Contributor
das iteriert über die Liste (FiFo Prinzip - edit: First In ? First Out ? Wikipedia)

Alles klar. :) Mir war nur wichtig, dass die Reihenfolge beibehalten wird. Ich hatte das biser immer als eine Art Mengenschreibweise aufgefasst "Integer i in dezToBinary(47)", so dass die Reihenfolge in der (alle) Elemente ausgelesen werden beliebig/nicht vorhersehbar ist.

Versteh nicht, warum du int b mit übergibts. du teilst doch immer durch 2, oder nicht? ausserdem brauchst du keine Methode pow schreiben, die ist bereits in java.lang.Math vorhanden.

Bei der pow Methode aus java.lang.Math hat mich das casten der integer Werte zu double Werten gestört. Ich arbeite in meinem Programm nur mit ganzzahligen Werten, da fehlte mir eine Potenzfunktion, die ohne casten auskommt.

Leider gab es keine von Java bereitgestellte Methode zur Umwandlung in Binärdarstellung. Da ich dann also gezwungen war eine eigene Implementierung zu verwenden und diese sehr einfach verallgemeinerbar ist, bot sich das an. :) Falls nötig kann man nun zu jeder Basis rechnen, ohne eine neue Funktion für eine andere Basis schreiben zu müssen.

Schöne Grüße, Rouven
 

Firestorm87

Bekanntes Mitglied
Was spricht eigentlich gegen die oben angesprochene
Code:
Integer.toBinaryString(irgendeineIntegerZahl)
?
Hab dazu leider nur
gibt sie einen String aus der mir leider nicht für die Weiterverarbeitung hilft
gefunden, welches Ich leider nicht nachvollziehen kann :)

Ich würde es als einfacher betrachten diesen String in eine Liste von Integer-Werten zu zerschnippeln, als die ganze Methode selber zu schreiben.... Sollte für dritte später auch wesentlich lesbarer sein...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Binärzahl vom Typ String in eine Zahl vom Typ Integer umwandeln Java Basics - Anfänger-Themen 4
M normalen Integer in Binärzahl umwandeln Java Basics - Anfänger-Themen 2
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
MoxMorris Integer.MAX_VALUE und Double.MAX_VALUE Unterschied Java Basics - Anfänger-Themen 3
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
volcanos Addition -> List<Integer> mit Arrays.asList() versus List<Integer>ArrayList<>() Java Basics - Anfänger-Themen 14
JavaBeginner22 Integer in String umwandeln Java Basics - Anfänger-Themen 7
sserio printf integer formatting Java Basics - Anfänger-Themen 17
M Unterschied Integer.toString(x) und x.toString() Java Basics - Anfänger-Themen 22
H Uhrzeitespanne in Integer Wert umrechnen Java Basics - Anfänger-Themen 1
T Java Integer multiplizieren Java Basics - Anfänger-Themen 6
H Fehler bei integer Division Java Basics - Anfänger-Themen 28
D Methoden Plathhalter für Integer in einer Methode Java Basics - Anfänger-Themen 19
StevenGG Java swing "New Integer" Java Basics - Anfänger-Themen 5
C Integer in Vierer-Zahlblöcke aufteilen Java Basics - Anfänger-Themen 11
L integer Java Basics - Anfänger-Themen 6
Zeppi Integer umschreiben Java Basics - Anfänger-Themen 5
rafi072001 Integer Anomalie Java Java Basics - Anfänger-Themen 7
Eule25 Arbeit mit long und int, Error: integer number too large Java Basics - Anfänger-Themen 2
J Transformation zweier Integer in ein Double Java Basics - Anfänger-Themen 26
M Integer aus aus einer Klasse in andere speichern Java Basics - Anfänger-Themen 12
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
D Fibonacci overflow integer Java Basics - Anfänger-Themen 8
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
S Integer Wert wird nicht übernommen Java Basics - Anfänger-Themen 2
V int zu Integer und String Java Basics - Anfänger-Themen 6
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
L Baum aus Integer Liste erstellen Java Basics - Anfänger-Themen 0
M Regex zum Integer.parseInt Java Basics - Anfänger-Themen 4
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
S Vergleichen ob der Integer der benutzt eingeben werden soll überhaupt ein int ist Java Basics - Anfänger-Themen 1
S Letzte Zahl eines Integer auslesen? Java Basics - Anfänger-Themen 3
K String in Integer umwandeln Java Basics - Anfänger-Themen 4
G Überprüfen ob alle Ziffern von 1-9 in einem Integer vorhanden sind Java Basics - Anfänger-Themen 6
D integer negativen Wert abspeichern Java Basics - Anfänger-Themen 3
A Mit JComboBox Ergebnis einen Integer aus einer anderen Klasse aufrufen. Java Basics - Anfänger-Themen 2
J Methoden Moving a n integer matrix Java Basics - Anfänger-Themen 3
R Eingabe String umwandeln zu Integer Werten Java Basics - Anfänger-Themen 8
M Input/Output Java Swing: Prüft ob Text aus JTextField ausschließlich Integer enthält Java Basics - Anfänger-Themen 15
J Erhöhen eines Values als Integer bei gleichen Keys in HashMap Java Basics - Anfänger-Themen 12
CptK Datentypen Integer ArrayList sortieren Java Basics - Anfänger-Themen 2
J Methoden Equals Methode für Integer und Objekte überschreiben? Java Basics - Anfänger-Themen 9
CptK Bestimmten Integer Wert aus Array filtern Java Basics - Anfänger-Themen 2
L String in Integer umwandeln Java Basics - Anfänger-Themen 3
K Datentypen String zu Integer parsen Java Basics - Anfänger-Themen 2
B Liste von Integer -> Nächster Wert bekommen Java Basics - Anfänger-Themen 5
S Integer aus Array filtern Java Basics - Anfänger-Themen 4
F Referenzvariable vom Typ "Integer" definieren. (Klausuraufgabe) Java Basics - Anfänger-Themen 5
M set Integer bzw. set null mit SQL DB Java Basics - Anfänger-Themen 9
H Bubblesort-Zwei Integer auf Dekade vergleichen. Java Basics - Anfänger-Themen 6
B Variablen integer im Array Java Basics - Anfänger-Themen 5
C Liste o.ä. erstellen mit <Integer, <Integer, String> Java Basics - Anfänger-Themen 7
R Kompletten String umwandeln in Integer Java Basics - Anfänger-Themen 10
H 32-Bit Zahl (Integer) in eine IPv4 Adresse umwandeln? Java Basics - Anfänger-Themen 2
Orkanson Datentypen Integer in String umwandeln/hinzufügen Java Basics - Anfänger-Themen 3
O Datentypen Integer mit führender Null Java Basics - Anfänger-Themen 13
M Argument in Integer verwandeln und das Doppelte davon printen Java Basics - Anfänger-Themen 9
D Fehler: String zu Integer Java Basics - Anfänger-Themen 7
L (Integer) Liste nach aufsteigender Summe der Ziffern sortieren (mit Bedingung) Java Basics - Anfänger-Themen 8
b1ck Integer initialisieren bei do-while-Schleife Java Basics - Anfänger-Themen 11
E Integer und Array übergeben Java Basics - Anfänger-Themen 9
W Fehler bei Integer.parseInt() Java Basics - Anfänger-Themen 4
R String in Integer Java Basics - Anfänger-Themen 11
D Komischer Fehler nach <Integer> List Java Basics - Anfänger-Themen 2
J Integer in Array einlesen Java Basics - Anfänger-Themen 14
J Warum ist das ein Unterschied (Integer / int) Java Basics - Anfänger-Themen 2
H Integer in Datei schreiben Java Basics - Anfänger-Themen 2
B OOP Cannot instantiate the type AuDList<Integer> Java Basics - Anfänger-Themen 18
3 ArrayList Integer Wrapper Klasse als Ersatz für normale Arrays Java Basics - Anfänger-Themen 10
K Methoden Integer runden/aufrunden Java Basics - Anfänger-Themen 2
E Erste Schritte Lower Bounded Wildcards <? super Integer> Java Basics - Anfänger-Themen 1
M Datentypen Integer und Float Konflikt Java Basics - Anfänger-Themen 3
J Integer-Werte in Array ein- bzw. auslesen Java Basics - Anfänger-Themen 7
T Integer Wert in andere Methode übergeben Java Basics - Anfänger-Themen 2
N Probleme bei Speicherung eines Integer-Array in Datei speichern Java Basics - Anfänger-Themen 3
C Zwei Integer Arrays "kombinieren" Java Basics - Anfänger-Themen 10
D Integer Fehlermeldung exception Java Basics - Anfänger-Themen 4
M Höchster Integer aus 9 Zahlen Java Basics - Anfänger-Themen 13
I Klassen Integer von BL in GUI übergeben | Fehler Java Basics - Anfänger-Themen 4
T Integer-Objekt über Hash-Funktion in Array ablegen Java Basics - Anfänger-Themen 1
S Integer/Value-Paar in Prio-Queue ohne Comparator Java Basics - Anfänger-Themen 5
D Datentypen Ein Integer Feld in einen String wandeln ohne Nullenunterdrückung Java Basics - Anfänger-Themen 6
R integer zahlenfolge speichern, ausgeben Java Basics - Anfänger-Themen 1
L Summer aller Integer-Zahlen im Intervall [x,y] Java Basics - Anfänger-Themen 6
K ArrayList<Integer> problem Java Basics - Anfänger-Themen 3
L Vom Benutzer eingebene Integer addieren und ausgeben. Java Basics - Anfänger-Themen 11
S integer absteigend sortieren Java Basics - Anfänger-Themen 2
S ArrayList<ArrayList<Integer>> sortieren Java Basics - Anfänger-Themen 3
T Variablen Integer in Stmt Java Basics - Anfänger-Themen 13
B gemischter string zu integer Java Basics - Anfänger-Themen 22
R Big Integer Java Basics - Anfänger-Themen 8
B Erste Schritte Integer Eingabe über Scanner mit Abfangen von Eingabefehlern Java Basics - Anfänger-Themen 3
B Variablen Wertezuweisung bei integer Java Basics - Anfänger-Themen 5
J Integer Werte in Array einlesen Java Basics - Anfänger-Themen 6
E Integer oder Strings spiegeln (in while loop) Java Basics - Anfänger-Themen 6
D String mit Integer Variablen Namen vergleichen, möglich? Java Basics - Anfänger-Themen 6
G Was passiert bei einem Overflow von zwei Integer Java Basics - Anfänger-Themen 6
H Integer.toString(int i) vs. String.valueOf(int i) Java Basics - Anfänger-Themen 12
K Date cannot be cast to java.lang.Integer Java Basics - Anfänger-Themen 4

Ähnliche Java Themen


Oben