Mathematik online lernen im Mathe-Forum. Nachhilfe online
Startseite » Forum » Konvertierung von Hexadezimal in ieee 754

Konvertierung von Hexadezimal in ieee 754

Universität / Fachhochschule

Sonstiges

Tags: Sonstiges

 
Antworten Neue Frage stellen Im Forum suchen
Neue Frage
antilopo

antilopo aktiv_icon

17:30 Uhr, 23.02.2015

Antworten
Hallo,

ich bin Informatikstudent und schreibe bald eine Klausur in Rechnerarchitektur.
Dabei gibt es ein mathematisches Thema, dass ich nicht ganz verstehe.

Und zwar geht es um die Konvertierung von Hexadezimalzahlen in das Gleitkommaformat IEEE 754 (32bit).

In einer Übung eines früheren Semesters gab es eine Aufgabe:

Gegeben ist ein Wort aus einem hexadezimalen Speicherauszug C2A00000.
Zerlegen Sie die Datenworte (es waren noch andere zwei andere Worte, aber ich habe beispielhaft das eine mal genommen) in ihre Bestandteile nach IEEE 754 und geben Sie diese an.

Geben Sie anschließend die Gleitkommazahl als Dezimalzahl an (VZ-Charakteristik-Mantisse)!

Ich habe das jetzt mehrfach gerechnet, erhalte aber nie die richtige Lösung.

Hier meine Rechnung:

1.) Umwandeln von Hexadezimalzahl C2A00000 in Dualzahl:
11000010101000000000000000000000

2.) Erstes Bit ist hierbei eine 1 und deswegen ist die Zahl wohl negativ (VZ =1).

3.) Normalisieren, also das Komma rechts direkt neben das Vorzeichenbit verschieben. Dadurch muss man natürlich den oben weggelassenen Exponenten 0 (also 20) verändern. Hierbei wäre das 231, weil das Komma von ganz rechts 31 Stellen nach links geschoben werden muss.

4.) Laut Beschreibung des IEEE-Standards berechnet sich die Charakteristik c der Gleitkommazahl aus c=e+B. B ist hierbei die Bias-Konstante, die für 32bit bei 127(Dezimal) liegt. Also: c=31+127c=158... in Binär: 10011110

Also hätten wir hier schon mal den VZ-Teil und den Charakteristik-Teil der Lösung: 1|10011110| Mantisse. Fehlt nur noch die Mantisse, die man oben aber auch leicht ablesen kann: 10000101010000000000 usw.

Meine Lösung ist also:
1|10011110|10000101010000000000000

Laut einem verlässlichen Internet-Konverter ist das Ergebnis allerdings:
1|10000101|01000000000000000000000

Und wer tatsächlich bis zu dieser Stelle hier mitgelesen bzw. mitgedacht hat, kann mir hoffentlich erklären, wo mein Fehler liegt. Das wäre sehr wichtig!

Liebe Grüße
antilopo



Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert):
"Ich möchte die Lösung in Zusammenarbeit mit anderen erstellen."
Online-Nachhilfe in Mathematik
Antwort
anonymous

anonymous

18:42 Uhr, 23.02.2015

Antworten
Falls es dir noch nicht aufgefallen ist:
Das verlässliche Ergebnis aus dem Internet ist einfach C2A00000 in Dualzahl umgewandelt, wie du es bei 1.) schon richtig gemacht hast, und Vorzeichen|Charakteristik|Mantisse abgegrenzt.

Was du bei 3.) und 4.) ist mir schleierhaft.

"Dadurch muss man natürlich den oben weggelassenen Exponenten 0 (also 20) verändern."
Der Exponent ist ja gar nicht weggelassen, sondern in der Charakteristik kodiert.

" Hierbei wäre das 231, weil das Komma von ganz rechts 31 Stellen nach links geschoben werden muss."
Woher kommen die 31? Den Exponenten weißt du doch noch gar nicht. Diesen musst du aus der Charakteristik ermitteln.

Die Charakteristik sind die 8 bit hinter dem Vorzeichen. Hier solltest du also von der in 1.) ermittelten Dualzahl ablesen:
c=[10000101]2=[133]10

Damit kann dann der Exponent e über c=e+B mit Biaswert B=[127]10 ermittelt werden:
e=c-B=[133]10-[127]10=[6]10

Wie du siehst, ist der Exponent hier 6, und nicht 31, wie von dir angenommen.

Der Nachkommaanteil M der Mantisse sind die 23 bit hinten. (Nicht direkt hinter dem Vorzeichen, wo du sie anscheinend ablesen wolltest, sondern hinter Vorzeichen und Charakteristik.)

Also:
M=01000000000000000000000

Demnach ergibt sich folgende Mantisse:
m=[1,01000000000000000000000]2=[1,25]10

--

Zusammenfassende Bemerkung:
Anstatt dir von irgendwoher einen falschen Exponenten zu besorgen und daraus eine falsche Charakteristik zu berechnen, ist es ganz einfach:

Die durch Umwandlung von C2A00000 erhaltene Dualzahl
11000010101000000000000000000000
mit Länge 32 bit unterteilst du einfach folgendermaßen in Abschnitte:

Vorzeichen | Charakteristik | Mantisse
1 bit |8 bit |23 bit
1|10000101|01000000000000000000000

Das ist schon der erste Teil.


Frage beantwortet
antilopo

antilopo aktiv_icon

20:17 Uhr, 23.02.2015

Antworten
Vielen Dank kenkyu für deine Mühe!

Du hast mir wahnsinnig geholfen!
Ich habe die Ausgabe des Internet-Konverters fehlinterpretiert und darauf basieren auch all meine anderen Fehler.

Das mit den 31 als Exponent kam daher, weil ich kein Komma in der 32-Bit-Zahl hatte und dachte "ich normalisier dann mal und schiebe das Komma bis an die rechte Seite des Vorzeichenbits". Das war natürlich völliger Blödsinn von mir.

Danke für die wirklich hervorragende Erklärung!

Liebe Grüße