Auf dieser Seite findest du Beispiele für typische Fälle im Umgang mit unterschiedlichen Datentypen und einige Besonderheiten die es zu beachten gilt.
Dazu gibt es ein paar Infos zum Thema: Was passiert eigentlich "unter der Haube" bei Formatumwandlungen in ANSI C/C++?
1. Konvertierung Float -> Integer (explicit cast)
Zwei Variablen vom Typ float und int sind gegeben. Der int Variable soll der entsprechende Wert der float Variablen zugewiesen werden:
float f = 1.0f; int i = 0; // Explicit cast a float to integer i = (float) f; // Result: i == 1
Der folgende Disassembly Code zeigt das Beispiel nach der Compilerung:
004119BA fld dword ptr [f] 004119BD call @ILT+390(__ftol2_sse) (41118Bh) 004119C2 mov dword ptr [i],eax
Ergebnis:
Beispiel für ein Genauigkeitsproblem:
f = 1e10; // The number is too large for a 32-bit integer i = (int) f; f = (float) i; // Result: f == -2.1474836e+009 // i == -2147483648
Zwei Variablen vom Typ float und int sind gegeben. Der int Variable soll der Wert aus dem Speicherplatz der float Variablen zugewiesen werden:
float f = 1.0f; int i = 0; // Reinterpret float as integer via pointer i = *((int*) &f); // Result: i == 0x3f800000 (Plattform mit 32-bit float und 32-bit integer)
Der folgende Disassembly Code zeigt das Beispiel nach der Compilerung:
// Compiled Result (disassembly): 004119C5 mov eax,dword ptr [f] 004119C8 mov dword ptr [i],eax
Ergebnis:
// Reinterpret float as integer via union union { float f; int i; } u; u.f = f; i = u.i;
Disassembly:
0041723B fld dword ptr [f] 0041723E fstp dword ptr [u] 00417241 mov eax,dword ptr [u] 00417244 mov dword ptr [i],eax
Zwei Variablen vom Typ float und int sind gegeben. Der float Variable soll der entsprechende Wert der int Variablen zugewiesen werden:
float f = 0.0f; int i = 1; f = (float) i; // Result: f == 1.0f
Ergebnis:
Beispiel für ein Genauigkeitsproblem:
float f = 0.0f; int i = 111111111111; // = 0x423a35c7 (the number is too large for a 24-bit float mantissa) f = (float) i; i = (int) f; // Result: f == 1.1111112e+009 // i == 1111111168 // = 0x423a3600
Hast du Anmerkungen zu den gezeigten C/C++ Codes, weitere hilfreiche Tipps oder Hinweise? Ich würde mich über Feedback freuen...
Diese Website benutzt Cookies. 🍪 Wenn Sie die Website weiter nutzen, stimmen Sie der Verwendung von Cookies zu. Mehr Infos