Binär zu Dezimal

multihamster

Mitglied
Hey Leute,

ich will eine Methode schreiben dir mir ein Binäres Integer Array in einen Dezimalen Integer umwandelt.
Ohne Array war es kein Problem, aber wie würdet ihr das mit einem Array als Eingabe lösen?
Würde mich über eine Antwort sehr freuen, danke :)
 

MarvinsDepression

Bekanntes Mitglied
-ein Array (int[]) erstellen und mit Einsen und Nullen füllen.
-ergebnis = 0
-
beginnend beim höchstwertigen 'Bit' durch das Array iterieren:
dabei jedes mal ergebnis = 2*ergebnis + Bit-Wert (1 oder 0)rechnen.
 

KonradN

Super-Moderator
Mitarbeiter
Wenn man es rein mathematisch betrachtet: Einfach das Array durchgehen und aufsummieren: Wert * 2 ^ index

Das * 2 entspricht einen shift um eine Stelle im dualen System. Und da wir immer nur neue Stellen hinzu addieren würde auch ein einfaches bitweises ODER reichen. Dann wäre es also etwas wie (Pseudocode):
Ergebnis := 0
Wertigkeit := 1
index von 0 ... höchster Index:
--> Wenn array[index] == 1 dann Ergebnis := Ergebnis | Wertigkeit
--> Wertigkeit := Wertigkeit << 1
 

MarvinsDepression

Bekanntes Mitglied
Der Witz an der Sache ist ja, dass der Inhalt des ursprünglichen Arrays in ein identisches Bitmuster in 'Ergebnis' kopiert wird. Erst bei der Visualisierung (Konsolenausgabe, etc.) wird von der JVM ein 'dezimale' Darstellung erzeugt.😆
Interessant wird die Aufgabe ja erst, wenn man diesen Schritt auch zufuß geht.
 

berndoa

Top Contributor
Mathematisch alternativ kann man auch die Formel von irgendwem benutzen, wo du von der größten zur kleinsten Binärziffer geht und immer zwischenddition und Multiplikation abwechselst. Musst du keine Potenzen benutzen.
In etwa so:
Binärzahl: 101100111
Dezimalzahl:(((((((((1)*2+0)*2+1)*2+1)*2+0)*2+0)*2+1)*2+1)*2+1)
Also sowas wie:

Java:
int[] array={1,0,1,1,0,0,1,1,1}
int dezimal=array[0];

for (int i=1;i<array.length-1;i++){
    dezimal=dezimal*2+array[i];
}

Also dezimal=erste ziffer ganz vorne.
und danach dezimal immer mal 2 plus folgestelle.
bsi man alle ziffern durch hat.
 

Jw456

Top Contributor
Mathematisch alternativ kann man auch die Formel von irgendwem benutzen, wo du von der größten zur kleinsten Binärziffer geht und immer zwischenddition und Multiplikation abwechselst. Musst du keine Potenzen benutzen.
In etwa so:
Binärzahl: 101100111
Dezimalzahl:(((((((((1)*2+0)*2+1)*2+1)*2+0)*2+0)*2+1)*2+1)*2+1)
Also sowas wie:

Java:
int[] array={1,0,1,1,0,0,1,1,1}
int dezimal=array[0];

for (int i=1;i<array.length-1;i++){
    dezimal=dezimal*2+array[i];
}

Also dezimal=erste ziffer ganz vorne.
und danach dezimal immer mal 2 plus folgestelle.
bsi man alle ziffern durch hat.
int dezimal=array[0]
Am Anfang sollte dezimal 0 sein.
Die for Schleife sollt somit auch von 0 anfangem.
Dann benutze doch mal eine foreach.
 
Zuletzt bearbeitet:

MarvinsDepression

Bekanntes Mitglied
Mathematisch alternativ kann man auch die Formel von irgendwem benutzen, wo du von der größten zur kleinsten Binärziffer geht und immer zwischenddition und Multiplikation abwechselst. Musst du keine Potenzen benutzen.
In etwa so:
Binärzahl: 101100111
Dezimalzahl:(((((((((1)*2+0)*2+1)*2+1)*2+0)*2+0)*2+1)*2+1)*2+1)
Also sowas wie:

Java:
int[] array={1,0,1,1,0,0,1,1,1}
int dezimal=array[0];

for (int i=1;i<array.length-1;i++){
    dezimal=dezimal*2+array[i];
}

Also dezimal=erste ziffer ganz vorne.
und danach dezimal immer mal 2 plus folgestelle.
bsi man alle ziffern durch hat.
Vorsicht! Üblicherweise befindet sich das 'least significant digit' bei Index 0 und bei diesem Algorithmus ist es wichtig beim 'most significant digit' zu beginnen. Die for-Schleife müsste also rückwärts laufen.
Das Array wird von links nach rechts initialisiert und somit als erstes der Index 0 eingetragen. Man könnte sagen, die binäre Zahl steht rückwärts geschrieben im Code.
Andererseits, wenn die Zahl als String codiert übergeben würde, wäre nach meiner unmaßgeblichen Meinug das MSD wieder links, weil wir beim lesen von zahlen es so erwarten. Ein toArray() liefert dann aber die faschen Indizes...
Was ist jetzt richtig(er) ? Diskussion folgt?
 

berndoa

Top Contributor
Vorsicht! Üblicherweise befindet sich das 'least significant digit' bei Index 0 und bei diesem Algorithmus ist es wichtig beim 'most significant digit' zu beginnen. Die for-Schleife müsste also rückwärts laufen.
Das Array wird von links nach rechts initialisiert und somit als erstes der Index 0 eingetragen. Man könnte sagen, die binäre Zahl steht rückwärts geschrieben im Code.
Andererseits, wenn die Zahl als String codiert übergeben würde, wäre nach meiner unmaßgeblichen Meinug das MSD wieder links, weil wir beim lesen von zahlen es so erwarten. Ein toArray() liefert dann aber die faschen Indizes...
Was ist jetzt richtig(er) ? Diskussion folgt?
Das häng thalt davon ab wie die binärzahl ins Array gepackt wird,
Ich würde sie normal so eintragen wie sie da steht, also von links nahc rechts mit index 0,1,2,3,4,etc.

Klar, mathematisch gesehen (Stellenwertsystem und so) steht da

Binärzahl: 101100111
=1*2^8+0*2^7+1*2^6+1*2^5+...

die 1 vorne das msot significant bit und da 1 hinten das least significant bit.

Für die formel müsste man wie gesagt eigentlich vom most bis zum least significant bit gehen wobei ich annehme dass die ziffern von most zu least SB ins Array gepackt sind.

Aber gut, das hängt halt von der AUfgabe ab.
Falls sie Ziffern andersrum im Array sind, zählt man halt nicht von oben nahc unten sondern umgekehrt.
 

berndoa

Top Contributor
int dezimal=array[0]
Am Anfang sollte dezimal 0 sein.
Die for Schleife sollt somit auch von 0 anfangem.
Dann benutze doch mal eine foreach.
das hatte ich am Anfang auch so vor aber wird dann nicht das MSB (die ziffer ganz links in der zahl) einmal zu oft mit 2 multipliziert?
Man fngt doch(wie oben dargelegt, erst mal mit der 1 ganz links an.
dann *2+0.
dann *2+1.
also für jede weitere ziffer nach der index=0ten ein *2+folgeziffer. oder? :O

Vielleicht habe ich die Formel auch nur falsch in erinnerung.
Aber rein logisch , wenn ich hinten eine ziffer dazu mache, werden ja alle vorherigen ziffdern mit 2 multipliziert, also "um eine stelle erhöht".

keine AHnung, müsste meiner Meinung nahc eigentlich so passen.
 

KonradN

Super-Moderator
Mitarbeiter
aber wird dann nicht das MSB (die ziffer ganz links in der zahl) einmal zu oft mit 2 multipliziert?
So lange Du nur mit 2 multiplizierst, wenn Du auch eine Ziffer anfügst, dann passt es.

Und dann ist es auch genau das, was @MarvinsDepression in #3 schon beschrieben hatte in Pseudocode:
-ein Array (int[]) erstellen und mit Einsen und Nullen füllen.
-ergebnis = 0
-
beginnend beim höchstwertigen 'Bit' durch das Array iterieren:
dabei jedes mal ergebnis = 2*ergebnis + Bit-Wert (1 oder 0)rechnen.

Daher passt das so und Du hast das richtig in Erinnerung gehabt.
 

Jw456

Top Contributor
das hatte ich am Anfang auch so vor aber wird dann nicht das MSB (die ziffer ganz links in der zahl) einmal zu oft mit 2 multipliziert?
Man fngt doch(wie oben dargelegt, erst mal mit der 1 ganz links an.
dann *2+0.
dann *2+1.
also für jede weitere ziffer nach der index=0ten ein *2+folgeziffer. oder? :O

Vielleicht habe ich die Formel auch nur falsch in erinnerung.
Aber rein logisch , wenn ich hinten eine ziffer dazu mache, werden ja alle vorherigen ziffdern mit 2 multipliziert, also "um eine stelle erhöht".

keine AHnung, müsste meiner Meinung nahc eigentlich so passen.
wenn das MSB auf Pos[0] im Array ist Passt dein Code.

wenn du eine ForEach benutzt musst du mit 0 anfangen
Java:
int[] array={1,0,1,1,0,0,1,1,1}
int dezimal=0;

for (int bit  : array ){
    dezimal=dezimal*2+array[bit];
}
// 0*2 = 0 + 1 = 1
// 1*2 = 2 + 0 = 2
// 2*2 = 4 + 1 = 5
....
 

berndoa

Top Contributor
Am Ende vom Lied meinen wir ALle Dasselbe und je nachdem wie die Binärziffern wie herum im Array abgelegt sind, ändert sich halt geringfügig der Code.

Ging mir ja eigentlich auch nur durm dass es die Variante gibt bei der man nicht dauernd Potenzen berechnen lassen muss.
Ist vor Allem auch praktisch falls man bspw. nicht alle Ziffern als Array da liegen hat sondern die Binärzahl (most significant bit first, also links nach rechts) ziffernweise eingelesen bekommt.

Praktishc für Streams und so (Obgleich ich noch nie Streams benutzt habe, nur immer drüber gelesen :)). Oder auch die Standardeingabe mit dem klassischen
Java:
while(Eingabeteil.getNext()!=null){
    //hier Ziffer verarbeiten
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Dezimal in Binär (Array) Java Basics - Anfänger-Themen 2
Z Dezimal > Binär-Umrechnung Logikfehler? Java Basics - Anfänger-Themen 8
K Erste Schritte Dezimal in binär Java Basics - Anfänger-Themen 17
S Umwandlung Binär in Dezimal (ohne array etc.) Java Basics - Anfänger-Themen 6
V Binär in Dezimal Java Basics - Anfänger-Themen 4
S Umrechner (Dezimal, Hexadezimal und Binär) Java Basics - Anfänger-Themen 3
C dezimal in binär Java Basics - Anfänger-Themen 3
M Binär -> Dezimal Java Basics - Anfänger-Themen 11
N Umrechung Binär in Dezimal und Hexadezimal Java Basics - Anfänger-Themen 7
B Dezimal Binär? Java Basics - Anfänger-Themen 10
R Unicode-Wert in Binär und Dezimal umformen - kleines Problem Java Basics - Anfänger-Themen 1
C Hilfe bei Umrechnung von dezimal nach binär Java Basics - Anfänger-Themen 9
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
A Dezinal in Binär Recursiv Java Basics - Anfänger-Themen 6
W Dez-->Binär mit eigener bit Anzahl Erkennung. Java Basics - Anfänger-Themen 3
parrot Binär Addieren Java Basics - Anfänger-Themen 21
F Erste Schritte Binär zahle auf 8 stellen aufüllen Java Basics - Anfänger-Themen 2
Orkanson Long Binär darstellen Java Basics - Anfänger-Themen 1
W Dezimalzahl in Binär umwandeln - Was sollte ich an meinem Programm verbessern? Java Basics - Anfänger-Themen 5
L String in Binär umwandeln Java Basics - Anfänger-Themen 4
ubaro1 Operatoren Der Tide Operator und positive Ganzzahlen in Binär Java Basics - Anfänger-Themen 1
T Erste Schritte Nachkommstellen in Binär mit Vekotoren Java Basics - Anfänger-Themen 3
M hexadezimal in binär mit Hilfe von Shift-Operatoren Java Basics - Anfänger-Themen 6
R Dezimalzahlen zu Binär Java Basics - Anfänger-Themen 3
B datentyp in binär umwandeln Java Basics - Anfänger-Themen 5
S binär string Java Basics - Anfänger-Themen 10
N Binär suchen: Java Basics - Anfänger-Themen 4
E Methoden umrechnung binär/oktal/hexadezimal in dezimalsystem (Methode) Java Basics - Anfänger-Themen 1
A double and add algorithmus für elliptische kurven/ integer binär darstellen Java Basics - Anfänger-Themen 14
K Binär Logisch Und, logisch Oder, subtrahieren Java Basics - Anfänger-Themen 8
G Binär in Byte speichern Java Basics - Anfänger-Themen 7
eLogic .txt Testdatei to Binär Java Basics - Anfänger-Themen 2
F Hex zu Binär Java Basics - Anfänger-Themen 7
Shanks Problem bei Binär überprüfung Java Basics - Anfänger-Themen 3
S Array Daten in Binär Datei schreiben/lesen Java Basics - Anfänger-Themen 11
H Java Double in Binär, Hex oder Octalzahl wandeln Java Basics - Anfänger-Themen 3
JeromeM90 (Brauche Hilfe) Binär- in Dezimalzahlkonverter Java Basics - Anfänger-Themen 8
N Binär Datei kopieren Java Basics - Anfänger-Themen 2
T longs binär verarbeiten Java Basics - Anfänger-Themen 4
G Objekte binär speichern und später wieder einlesen? Java Basics - Anfänger-Themen 7
G char[] binär schreiben? Java Basics - Anfänger-Themen 2
V Binär + Hexadezimal Java Basics - Anfänger-Themen 3
V String mit Hexadezimalzahlen in Binär umwandeln Java Basics - Anfänger-Themen 2
A Binär-Datei versenden übers Internet Java Basics - Anfänger-Themen 2
R String nach Binär-Form Java Basics - Anfänger-Themen 3
Ostkreuz Methoden Von Dezimal zu Hexadezimal Methode toHex Java Basics - Anfänger-Themen 2
S Algorithmus (reelle Zahl <65536 von dezimal zu dual) max. 10 Nachkommastellen Java Basics - Anfänger-Themen 4
JD_1998 Vorgegebene Methode erweitern um Hex -> Dezimal umzuwandeln Java Basics - Anfänger-Themen 1
P Dezimal zu Hexadezimalzahl Funktion Java Basics - Anfänger-Themen 5
D Dezimal zu Dual mit Rückgabewert Java Basics - Anfänger-Themen 39
G Dezimal zu Binärcode Programm Java Basics - Anfänger-Themen 9
D Umrechnung dezimal -> oktal | signed/unsigned? Java Basics - Anfänger-Themen 1
L Dezimal- zu Binärsystem Java Basics - Anfänger-Themen 4
P 32 Bit Binärzahl Umwandeln in Dezimal Java Basics - Anfänger-Themen 8
D römische Zahlen in Dezimal ausgeben Java Basics - Anfänger-Themen 9
dave253 IEEE-Norm in Dezimal Java Basics - Anfänger-Themen 12
W Umwandeln von Dezimal in Dual - Ausgabe incl. Rechenschritte Java Basics - Anfänger-Themen 11
H Erste Schritte Uhrzeit anzeigen in Minuten Dezimal Java Basics - Anfänger-Themen 8
F Erste Schritte Dezimal in Hexadezimal Java Basics - Anfänger-Themen 5
F Erste Schritte [GUI] Dual in Dezimal rechnen Java Basics - Anfänger-Themen 5
N Compiler-Fehler Dezimal to binary Java Basics - Anfänger-Themen 2
C Dezimal- und InputVerifier/FocusListener Probleme Java Basics - Anfänger-Themen 3
E Hexadezimal in Dezimal Java Basics - Anfänger-Themen 25
G Java Dezimal Zahlen Internazialisation Problem Java Basics - Anfänger-Themen 7
M Verständnisfrage zur Zahlenumwandlung (Dezimal-->Dual) Java Basics - Anfänger-Themen 25
U Dezimal zu Hexadezimal rekursive Funktion Java Basics - Anfänger-Themen 8
F dezimal zu hexadezimal Java Basics - Anfänger-Themen 14
V Tool zum Umrechnen Dezimal in Hex Java Basics - Anfänger-Themen 7
B Dezimal --> Hex Java Basics - Anfänger-Themen 3
M String(Binärzahl) in Dezimal umwandeln Java Basics - Anfänger-Themen 4
S Dual in Dezimal umwandeln? Java Basics - Anfänger-Themen 24
G Dezimal zu Hexadezimal Java Basics - Anfänger-Themen 2
S Dezimal- in Hexadezimalzahl umwandeln Java Basics - Anfänger-Themen 4
M wie hexadezimal in dezimal wandeln? Java Basics - Anfänger-Themen 16
O Dezimal in Dual...Arraygröße & Runden Java Basics - Anfänger-Themen 4
X Dezimal/-Hexcode in lebares format umwandeln Java Basics - Anfänger-Themen 4
S dezimal od. hexadezimal Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben