binärzahl in gleitkommazahl

hallo ich möchte eine binärzahl in float umwandeln.
kann mir jemand vielleicht sagen wie ich die sache angehen muss?

private final String[] data = {
 // BEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM
 "01000010111101101110011001100110";
 "10111111100000000000001101000110",
 "01000000010010010000111111010000",
 "11001001101001011100001011001000",
 "01000111100111001100111100000000",
 "01001000011101001000000111000000"};

Diese 6 binärzahlen sollen in gleitkommazahlen im 32-Bit format umgewandelt werden…

vielen vielen dank für eure hilfe!

hallo ich möchte eine binärzahl in float umwandeln.
kann mir jemand vielleicht sagen wie ich die sache angehen
muss?

private final String[] data = {
// BEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM
„01001000011101001000000111000000“};

Zunächst solltest du dir klar werden, wie Gleitkomma-Zahlen aufgebaut sind. Wesentliche Elemente sind z.B. Vorzeichen, Mantisse und Exponent, bei dir als B, M und E angedeutet in dem Kommentar:
Die Zahl unter dem B gibt demnach das Vorzeichen an (0=positiv, 1=negativ).
Die Zahlen unter den E’s markieren den Exponent, also 100100000.
Die Zahlen unter den M’s definieren die Mantisse, also 11101001000000111000000.

Falls dir nicht klar ist, wie das mit Mantisse, Exponent usw funktioniert, also wie Gleitkommazahlen überhaupt funktioniert, lies dir erstmal das hier durch:
http://www.ulthryvasse.de/db72.html

Wenn du das verstanden hast, dann ist hier in diesem Artikel genau beschrieben, wie du die Zahl in eine „normale Zahl“, also z.B. 11063,24 umwandeln kannst.
http://de.wikipedia.org/wiki/IEEE_754#Berechnung_IEE…

Im Prinzip musst du das dann nur noch in Java nachprogrammieren.

Oder er erfindet das Rad nicht nochmal neu sondern nutzt einfach die bestehenden Funktionen aus java.lang.* :smile:

Float.intBitsToFloat(Integer.valueOf("01001000011101001000000111000000", 2))

oder wenn du kein auto-boxing hast

Float.intBitsToFloat(Integer.valueOf("01001000011101001000000111000000", 2).intValue())

Wenn du 64 bits hast und nicht 32, dann nimmst du eben Double und Long statt Float und Integer.

Gruß
Vampire