// Also, ich bin jetzt so weit gekommen. Da ist ein Fehler drin #include <stdio.h> int main (void) { float a; int i; printf ("%in", sizeof(a)); a = 543.75; for (i = 0; i < 32; i++) printf ("%i", (((unsigned short int)*(\&a)) >> (31-i)) \& 0x01); return 0; } /* f = (-1)\^s * 1.m * 2\^(e-b) * -543.75 * 543 / 2 = 271 Rest 1 * 271 / 2 = 135 Rest 1 * 135 / 2 = 67 Rest 1 * 67 / 2 = 33 Rest 1 * 33 / 2 = 16 Rest 1 * 16 / 2 = 8 Rest 0 * 8 / 2 = 4 Rest 0 * 4 / 2 = 2 Rest 0 * 2 / 2 = 1 Rest 0 * 1 / 2 = 0 Rest 1 * * 10.0001.1111 * * 0.75 * 2 = 1.5 1 * 0.5 * 2 = 1 1 * * 10.0001.1111.11 * 1,000.0111.1111 * Jetzt zun"achst Ohne Vorzeichen. das Komma um 9 Stellen verschoben * 127 + 9 = 136 * * 136 / 2 = 68 Rest 0 * 68 / 2 = 34 Rest 0 * 34 / 2 = 17 Rest 0 * 17 / 2 = 8 Rest 1 * 8 / 2 = 4 Rest 0 * 4 / 2 = 2 Rest 0 * 2 / 2 = 1 Rest 0 * 1 / 2 = 0 Rest 1 * * 1000.1000 * * 0 | 1000.1000 | 10.0001.1111.11 */
Doch an meiner Umrechnung scheint alles zu stimmen - nur das Float in C scheint an dieser Stelle bei mir nicht zu stimmen Weil, nachdem ich den Wert vor dem Komma änderte, änderte sich die Darstellung, als ich danach etwas änderte nicht.
// Ok, dieses Programm tut besser #include <stdio.h> #include <string.h> int main (void) { float a; int i; char s[sizeof(float)]; printf ("%in", sizeof(a)); a = (float)543.75; memcpy(s, \&a, sizeof(a)); for (int i = 0; i < sizeof(float); ++i) printf("%x", s[i]); return 0; } /* f = (-1)\^s * 1.m * 2\^(e-b) * -543.75 * 543 / 2 = 271 Rest 1 * 271 / 2 = 135 Rest 1 * 135 / 2 = 67 Rest 1 * 67 / 2 = 33 Rest 1 * 33 / 2 = 16 Rest 1 * 16 / 2 = 8 Rest 0 * 8 / 2 = 4 Rest 0 * 4 / 2 = 2 Rest 0 * 2 / 2 = 1 Rest 0 * 1 / 2 = 0 Rest 1 * * 10.0001.1111 * * 0.75 * 2 = 1.5 1 * 0.5 * 2 = 1 1 * * 10.0001.1111.11 * 1,000.0111.1111 * Jetzt zun"achst Ohne Vorzeichen. das Komma um 9 Stellen verschoben * 127 + 9 = 136 * * 136 / 2 = 68 Rest 0 * 68 / 2 = 34 Rest 0 * 34 / 2 = 17 Rest 0 * 17 / 2 = 8 Rest 1 * 8 / 2 = 4 Rest 0 * 4 / 2 = 2 Rest 0 * 2 / 2 = 1 Rest 0 * 1 / 2 = 0 Rest 1 * * 1000.1000 * * 0 | 1000.1000 | 10.0001.1111.11 */
Wobei wir aufpassen müssen, mein Computer speichert in little Endian
Nein, ich habe die Musterlösung
Es kommt einen deut was anderes raus, als mein C Programm sagt.
Ach, so jetzt weiss ich wo der Fehler ist, die führende 1 muss nicht dargestellt werden, das war der Fehler.
/ * Das entspricht etwa, dem, was in der L"osung steht */ #include <stdio.h> #include <string.h> int main (void) { float a; int i; char s[sizeof(float)]; printf ("%in", sizeof(a)); a = (float)543.75; memcpy(s, \&a, sizeof(a)); for (int i = 0; i < sizeof(float); ++i) printf("%x", s[i]); return 0; } /* f = (-1)\^s * 1.m * 2\^(e-b) * -543.75 * 543 / 2 = 271 Rest 1 * 271 / 2 = 135 Rest 1 * 135 / 2 = 67 Rest 1 * 67 / 2 = 33 Rest 1 * 33 / 2 = 16 Rest 1 * 16 / 2 = 8 Rest 0 * 8 / 2 = 4 Rest 0 * 4 / 2 = 2 Rest 0 * 2 / 2 = 1 Rest 0 * 1 / 2 = 0 Rest 1 * * 10.0001.1111 * * 0.75 * 2 = 1.5 1 * 0.5 * 2 = 1 1 falsch - nichts * * 10.0001.1111.1 * 1,0.0001.1111.1 * 127 + 9 = 136 * * 136 / 2 = 68 Rest 0 * 68 / 2 = 34 Rest 0 * 34 / 2 = 17 Rest 0 * 17 / 2 = 8 Rest 1 * 8 / 2 = 4 Rest 0 * 4 / 2 = 2 Rest 0 * 2 / 2 = 1 Rest 0 * 1 / 2 = 0 Rest 1 * * 1000.1000 * 136 \^= 1000.1000 * 1,0.0001.1111.1,11 |0|1000.1000|1,0.0001.1111.1,11 |0|10001000|1000011111111 1100.0100.0100.0011.1111.1100 1100.0100.0000.0111.1111.1000 C407F8 */