printf("%x\n", inf)
erwartet eine Ganzzahl (32 Bit auf MSVC), erhält aber ein Double. Heiterkeit wird folgen. Err, ich meine: undefiniertes Verhalten.
(Und ja, es erhält ein Double, da für eine Liste mit variablen Argumenten floats auf double hochgestuft werden).
Wie auch immer, Sie sollten numeric_limits
verwenden, wie auch die andere Antwort sagt.
In der Variablenargumentliste für printf werden Floats zu doubles hochgestuft. Die Kleinendian-Byte-Darstellung von Unendlich als Doppel ist 00 00 00 00 00 00 00 F0 7F.
Wie schon erwähnt, erwartet "% x" ein int, nicht ein double. Printf betrachtet also nur die erste Größe von (int) Bytes des Arguments. Keine Version von MSVC ++ definiert int als größer als 4 Byte, so dass Sie nur Nullen erhalten.
Das passiert, wenn du zu printf () lügst, es ist falsch. Wenn Sie den Formatierungsbezeichner% x verwenden, erwartet er, dass eine Ganzzahl auf dem Stapel übergeben wird, nicht ein Float, der auf dem FPU-Stapel übergeben wird. Korrektur:
%Vor% Sie können die Unendlichkeit aus der Header-Datei <limits>
C ++ erhalten:
Tags und Links c++ visual-c++ floating-point infinity