In hexadezimal 1065353216 ist 0x3F800000. Wenn Sie das als eine 32-Bit-Fließkommazahl interpretieren, erhalten Sie 1.0. Wenn Sie es in binären schreiben Sie diese:
3 F 8 0 0 0 0 0
0011 1111 1000 0000 0000 0000 0000 0000
Oder anders gruppiert:
0 01111111 00000000000000000000000
s eeeeeeee vvvvvvvvvvvvvvvvvvvvvvv
Das erste Bit (s
) ist das Vorzeichenbit, die nächsten 8 Bits (e
) sind der Exponent und die letzten 23 Bits (v
) sind die Signifikanden. "Der binäre Fließkomma-Exponent mit einfacher Genauigkeit wird unter Verwendung einer versetzten Binärdarstellung codiert, wobei der Null-Offset 127 ist; auch bekannt als Exponent-Bias in der IEEE 754 standard." Wenn Sie dies interpretieren, sehen Sie, dass das Vorzeichen 0 (positiv) ist, der Exponent 0 ist (01111111 b = 127, der "Null-Offset"), und der Signifikand ist 0. Das ergibt +0 was 1,0 ist.
Wie auch immer, Sie nehmen einen Verweis auf einen Float (b
) und interpretieren ihn als int-Referenz (int&)
. Wenn Sie also den Wert j
lesen, erhalten Sie die Bits von b
. Als ein Float interpretieren diese Bits bedeuten 1,0, aber interpretiert als ein int diese Bits bedeuten 1065353216.
Für was es wert ist, habe ich nie einen Guss mit &
wie (int&)
verwendet. Ich würde nicht erwarten, dies zu sehen oder dies in irgendeinem normalen C++ Code zu verwenden.
Ja, es ist eine große Antwort. Aber ich bekomme noch eine Frage. Warum ein Fehler, "Fehler: ungültiger static_cast vom Typ 'float', um 'int &'" einzugeben, passierte, wenn ich static_cast verwendete, um einen Gleitkommawert nach int & gießen "float b = 1.0f; int & j = statischer_cast b;". Ich habe die Einschränkungen von static_cast in meinem favoraite C++ - Buch "Die C++ Programmiersprache" nicht gefunden. –
toby
Das ist der Schutz, den Sie von C++ - Casts erhalten. Wenn der Compiler einen statischen_Cast akzeptiert, besteht die Gefahr, dass Sie nichts falsch machen. Die einzigen unsicheren Dinge, die ein Static Casting erlaubt, ist eine ungeprüfte Konvertierung von Base */Base & zu Derived */Derived & und void * zu T * soweit ich mich erinnern kann. Es kann grundsätzlich implizite Konvertierungen invertieren, nicht mehr - nicht zählen const Konvertierungen. – sellibitze
Hallo, sellibitze, danke für deine Hilfe! Ich hab es geschafft! – toby