Delen via


Conversies van typen drijvende komma

Een drijvende-kommawaarde die wordt geconverteerd naar een ander type drijvende komma, ondergaat geen wijziging in waarde als de oorspronkelijke waarde exact in het resultaattype kan worden weergegeven. Als de oorspronkelijke waarde numeriek is, maar niet exact kan worden weergegeven, is het resultaat ofwel de volgende hogere of volgende lagere vertegenwoordigbare waarde. Zie Limieten voor drijvendekommageconstanten voor het bereik van typen drijvende komma.

Een drijvendekommawaarde die wordt geconverteerd naar een integraal type, wordt eerst afgekapt door eventuele breukwaarden te negeren. Als deze afgekapte waarde in het resultaattype wordt weergegeven, moet het resultaat die waarde zijn. Wanneer deze niet kan worden vertegenwoordigd, is de resultaatwaarde niet gedefinieerd.

Microsoft-specifieke

Microsoft-compilers gebruiken IEEE-754 binaire32-weergave voor float waarden en binaire64-weergave voor long double en double. Omdat long double ze double dezelfde weergave gebruiken, hebben ze hetzelfde bereik en dezelfde precisie.

Wanneer de compiler een double of long double drijvendekommagetal converteert naar een float, rondt het het resultaat af op basis van de besturingselementen voor de drijvendekommaomgeving, die standaard 'rond naar dichtstbijzijnd, is gekoppeld aan even'. Als een numerieke waarde te hoog of te laag is om te worden weergegeven als een numerieke float waarde, is het conversieresultaat positief of negatief oneindig volgens het teken van de oorspronkelijke waarde en wordt er een overloopuitzondering gegenereerd, indien ingeschakeld.

Het resultaat van een conversie naar een integraal type kleiner dan long is het resultaat van het converteren van de waarde naar longen vervolgens converteren naar het resultaattype.

Voor conversie naar gehele getallen kan longeen conversie van een waarde die te hoog of te laag is om weer te geven in het resultaattype een van de volgende waarden retourneren:

  • Het resultaat kan een sentinel-waarde zijn, die de vertegenwoordigbare waarde is die het meest van nul is. Voor ondertekende typen is dit de laagste vertegenwoordigbare waarde (0x800... 0). Voor niet-ondertekende typen is dit de hoogste vertegenwoordigbare waarde (0xFF... F).

  • Het resultaat kan verzadigd zijn, waarbij waarden die te hoog zijn om weer te geven, worden geconverteerd naar de hoogste vertegenwoordigbare waarde. Waarden die te laag zijn om weer te geven, worden geconverteerd naar de laagste vertegenwoordigbare waarde. Een van deze twee waarden wordt ook gebruikt als de sentinel-waarde.

  • Voor conversie naar unsigned long of unsigned long longkan het resultaat van het converteren van een waarde buiten het bereik een andere waarde zijn dan de hoogste of laagste vertegenwoordigbare waarde. Of het resultaat nu een sentinel- of verzadigingswaarde is of niet afhankelijk is van de compileropties en doelarchitectuur. Toekomstige compilerreleases kunnen in plaats daarvan een verzadigings- of sentinel-waarde retourneren.

Microsoft-specifieke beƫindigen

De volgende tabel bevat een overzicht van conversies van zwevende typen.

Tabel met conversies van typen drijvende komma

Van Tot Methode
float char Converteren naar longen vervolgens converteren long naar char
float short Converteren naar longen vervolgens converteren long naar short
float int Afkappen bij decimaalteken. Als het resultaat te groot is om te worden weergegeven als int, is het resultaat niet gedefinieerd.
float long Afkappen bij decimaalteken. Als het resultaat te groot is om te worden weergegeven als long, is het resultaat niet gedefinieerd.
float long long Afkappen bij decimaalteken. Als het resultaat te groot is om te worden weergegeven als long long, is het resultaat niet gedefinieerd.
float unsigned char Converteren naar longen vervolgens converteren long naar unsigned char
float unsigned short Converteren naar longen vervolgens converteren long naar unsigned short
float unsigned Afkappen bij decimaalteken. Als het resultaat te groot is om te worden weergegeven als unsigned, is het resultaat niet gedefinieerd.
float unsigned long Afkappen bij decimaalteken. Als het resultaat te groot is om te worden weergegeven als unsigned long, is het resultaat niet gedefinieerd.
float unsigned long long Afkappen bij decimaalteken. Als het resultaat te groot is om te worden weergegeven als unsigned long long, is het resultaat niet gedefinieerd.
float double Vertegenwoordigen als een double.
float long double Vertegenwoordigen als een long double. In MSVC long double en double dezelfde weergave hebben.
double char Converteren naar floaten vervolgens converteren float naar char
double short Converteren naar floaten vervolgens converteren float naar short
double int Afkappen bij decimaalteken. Als het resultaat te groot is om te worden weergegeven als int, is het resultaat niet gedefinieerd.
double long Afkappen bij decimaalteken. Als het resultaat te groot is om te worden weergegeven als long, is het resultaat niet gedefinieerd.
double unsigned char Converteren naar longen vervolgens converteren long naar unsigned char
double unsigned short Converteren naar longen vervolgens converteren long naar unsigned short
double unsigned Afkappen bij decimaalteken. Als het resultaat te groot is om te worden weergegeven als unsigned, is het resultaat niet gedefinieerd.
double unsigned long Afkappen bij decimaalteken. Als het resultaat te groot is om te worden weergegeven als unsigned long, is het resultaat niet gedefinieerd.
double unsigned long long Afkappen bij decimaalteken. Als het resultaat te groot is om te worden weergegeven als unsigned long long, is het resultaat niet gedefinieerd.
double float Vertegenwoordigen als een float. Als de double waarde niet exact kan worden weergegeven als float, treedt er verlies van precisie op.
double long double De long double waarde wordt behandeld als double.

Conversies van long double volgen dezelfde methode als conversies van double.

Zie ook

Toewijzingsconversies