Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein Gleitkommawert, der in einen anderen Gleitkommatyp konvertiert wird, wird nicht geändert, wenn der ursprüngliche Wert exakt im Ergebnistyp dargestellt werden kann. Wenn der ursprüngliche Wert numerisch ist, aber nicht exakt dargestellt werden kann, ist das Ergebnis entweder der nächste höhere oder nächste niedrigere darstellbare Wert. Weitere Informationen über den Bereich von Gleitkommatypen erhalten Sie unter Grenzwerte für Gleitkommakonstanten.
Ein Gleitkommawert, der in einen integralen Typ konvertiert wird, wird zunächst abgeschnitten, indem etwaige Bruchwerte verworfen werden. Wenn dieser gekürzte Wert im Ergebnistyp darstellbar ist, muss das Ergebnis dieser Wert sein. Wenn er nicht darstellbar ist, ist der Ergebniswert nicht definiert.
Microsoft-spezifisch
Microsoft-Compiler verwenden die 32-Bit-IEEE-754-Binärdarstellung für float -Werte und die 64-Bit-Binärdarstellung für long double - und double -Werte. Da long double und double dieselbe Darstellung verwenden, weisen sie denselben Bereich und dieselbe Genauigkeit auf.
Wenn der Compiler eine Gleitkommazahl des Typs double oder long double in eine Gleitkommazahl des Typs float konvertiert, wird das Ergebnis gemäß der Umgebungssteuerung für Gleitkommazahlen gerundet (standardmäßig „round to nearest, ties to even“). Ist ein numerischer Wert zu hoch oder zu niedrig, um als numerischer float-Wert dargestellt zu werden, lautet das Konvertierungsergebnis entsprechend dem Vorzeichen des ursprünglichen Werts „positiv unendlich“ oder „negativ unendlich“. Außerdem wird eine Überlaufausnahme ausgelöst, wenn dies möglich ist.
Das Ergebnis einer Konvertierung in einen integralen Typ, der kleiner als long ist, entspricht dem Ergebnis der Konvertierung des Werts in long und der anschließenden Konvertierung in den Ergebnistyp.
Bei der Konvertierung in ganzzahlige Typen, die größer oder gleich long sind, kann eine Konvertierung eines Werts, der zu hoch oder zu niedrig ist, um im Ergebnistyp dargestellt zu werden, jeden der folgenden Werte zurückgeben:
Das Ergebnis kann ein Sentinelwert sein, bei dem es sich um den darstellbaren Wert von 0 (null) handelt. Bei signierten Typen ist dies der niedrigste darstellbare Wert (0x800... 0). Bei nicht signierten Typen ist dies der höchste darstellbare Wert (0xFF...F).
Das Ergebnis kann gesättigt sein, wobei Werte, die zu hoch sind, um dargestellt zu werden, in den höchsten darstellbaren Wert konvertiert werden. Werte, die zu niedrig sind, um dargestellt zu werden, werden in den niedrigsten darstellbaren Wert konvertiert. Einer dieser beiden Werte wird auch als Sentinelwert verwendet.
Bei der Konvertierung in
unsigned longoderunsigned long longkann das Ergebnis der Konvertierung eines Werts außerhalb des Bereichs ein anderer Wert als der höchste oder niedrigste darstellbare Wert sein. Ob das Ergebnis ein Sentinelwert oder ein gesättigter Wert ist, hängt von den Compileroptionen und der Zielarchitektur ab. Zukünftige Compilerreleases können stattdessen einen gesättigten Wert oder einen Sentinelwert zurückgeben.
Ende Microsoft-spezifisch
In der folgenden Tabelle werden die Konvertierungen von Gleitkommatypen zusammengefasst.
Tabelle für Konvertierungen von Gleitkommatypen
| Von | Beschreibung | Methode |
|---|---|---|
float |
char |
Konvertieren Sie in long, und konvertieren Sie long dann in char. |
float |
short |
Konvertieren Sie in long, und konvertieren Sie long dann in short. |
float |
int |
Beim Dezimaltrennzeichen abschneiden. Wenn das Ergebnis zu groß ist, um als int dargestellt zu werden, wird es nicht definiert. |
float |
long |
Beim Dezimaltrennzeichen abschneiden. Wenn das Ergebnis zu groß ist, um als long dargestellt zu werden, wird es nicht definiert. |
float |
long long |
Beim Dezimaltrennzeichen abschneiden. Wenn das Ergebnis zu groß ist, um als long long dargestellt zu werden, wird es nicht definiert. |
float |
unsigned char |
Konvertieren Sie in long, und konvertieren Sie long dann in unsigned char. |
float |
unsigned short |
Konvertieren Sie in long, und konvertieren Sie long dann in unsigned short. |
float |
unsigned |
Beim Dezimaltrennzeichen abschneiden. Wenn das Ergebnis zu groß ist, um als unsigned dargestellt zu werden, wird es nicht definiert. |
float |
unsigned long |
Beim Dezimaltrennzeichen abschneiden. Wenn das Ergebnis zu groß ist, um als unsigned long dargestellt zu werden, wird es nicht definiert. |
float |
unsigned long long |
Beim Dezimaltrennzeichen abschneiden. Wenn das Ergebnis zu groß ist, um als unsigned long long dargestellt zu werden, wird es nicht definiert. |
float |
double |
Als double darstellen |
float |
long double |
Als long double darstellen In MSVC weisen long double und double die gleiche Darstellung auf. |
double |
char |
Konvertieren Sie in float, und konvertieren Sie float dann in char. |
double |
short |
Konvertieren Sie in float, und konvertieren Sie float dann in short. |
double |
int |
Beim Dezimaltrennzeichen abschneiden. Wenn das Ergebnis zu groß ist, um als int dargestellt zu werden, wird es nicht definiert. |
double |
long |
Beim Dezimaltrennzeichen abschneiden. Wenn das Ergebnis zu groß ist, um als long dargestellt zu werden, wird es nicht definiert. |
double |
unsigned char |
Konvertieren Sie in long, und konvertieren Sie long dann in unsigned char. |
double |
unsigned short |
Konvertieren Sie in long, und konvertieren Sie long dann in unsigned short. |
double |
unsigned |
Beim Dezimaltrennzeichen abschneiden. Wenn das Ergebnis zu groß ist, um als unsigned dargestellt zu werden, wird es nicht definiert. |
double |
unsigned long |
Beim Dezimaltrennzeichen abschneiden. Wenn das Ergebnis zu groß ist, um als unsigned long dargestellt zu werden, wird es nicht definiert. |
double |
unsigned long long |
Beim Dezimaltrennzeichen abschneiden. Wenn das Ergebnis zu groß ist, um als unsigned long long dargestellt zu werden, wird es nicht definiert. |
double |
float |
Als float darstellen Wenn der Wert double nicht exakt als float dargestellt werden kann, tritt ein Genauigkeitsverlust auf. |
double |
long double |
Der Wert long double wird als double behandelt. |
Bei Konvertierungen von long double wird das gleiche Verfahren wie bei Konvertierungen von double angewendet.