DOSBox 0.74, Bitweise multiplizieren im IEEE754 Standard
-
Guten Morgen Community,
ich bin ich 6. Semester meine E-Technik Studiums und meine Profs quälen mich zurzeit mit 4 verschiedenen Programmiersprachen (C++, C, C#, Object Pascal) und ich blicke nicht mehr durch.
Wir sollen innerhalb der DOSBox 0.74 eine bitweise multiplikation durchführen im IEEE754 Standard. Znächst ist die Zahl 239,125 mit 8 zu multiplizieren.
Mit der Hilfe eines freundes konnte ich ein Programm erstellen, was aber leider immer nur den Wert 0 ausgibt.
//Datum: 13.02.2017 //Aufgabe: Wandle die Zahl 239.125 in eine Bin„rzahl um und fr eine bitweise // Multipliaktion durch //======= HEADER ======= //Bibliotheken #include <stdio.h> #include <math.h> #include <conio.h> //======== Hauptprogramm ============= int main (void) { //Variablendeklaration: // - Laufvariable int i; // - Vorzeichen und Exponenten unsigned char vorzeichen; unsigned char expo; unsigned char test; // - Union zur Speicherung der umzurechnenden Zahl union { float f; unsigned char i[4]; }zahl; // - Initialisierung der Varibeln zahl.f = 239.125; test = 0x7F; //127 // Ausgabe der HEX-Zahl in der union for (i=0;i<=3;i++) { printf("%x\n",zahl.i[i]); }; // Vorzeichen extrahieren durch doppelten Bitshift nach links und rechts vorzeichen = (zahl.i[3] >> 7 ) << 7; printf("Vorzeichen: %x\n",vorzeichen); // Extrahierung des Exponenten expo = (zahl.i[3] << 1) |( zahl.i[2] >> 7 ); // Multiplikation mit 8 expo += 3; printf("Exponent: %x \n",expo); // Wieder zusammenfgen des Exponenten zahl.i[3] =( (expo << 1) | vorzeichen); // Anpassen des Exponenten zahl.i[2] = (( zahl.i[2] & test)|( expo <<7)); //Ausagbe der neuen Zahl printf("Die Zahl lautet:%f \n",zahl.f); for(i=0;i<=3;i++) printf("%x ",zahl.i[i]); // Warten auf eingabe getchar(); // clrscr(); return 0; };
Ich schätze, dass es im unteren Bereich liegen muss, da der Expo und das Vorzeichen korrekte ausgegeben werden.
Danke euch
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum C (alle ISO-Standards) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Eigentlich kommt nicht 0 heraus sondern 1.50909e-027.
Warum das so ist kann ich dir aber auch nicht sagen.Der Fehler liegt aber auf jeden Fall in den Zeilen 57 und 61.
In Zeile 57 wird der Wert auf 7.54545e-028 verändert und in Zeile 61 dann zu dem, was du herausbekommst.
-
Drehe die Bitverschiebung in Zeile 57 um.