Implicitní konverze elementárních typů
Níže je popsána konverze, která probíhá automaticky při vyhodnocování aritmetických výrazů. Obecně vzato, její implementace je shodná s explicitní datovou konverzí.
Uživatel si těchto pravidel musí být vědom především při použití na VM s přesností 32/64 bitů.
Při předávání parametrů přetížené funkci nebo pokud se ve výrazu operátora setkají operandy různých typů, implicitní převody jsou stanoveny pravidly, která následují:
- ANY_INT -> ANY_REAL
- SINT, USINT, INT, UINT, DINT, UDINT -> REAL, LREAL
- LINT, ULINT -> LREAL
- ANY_INT -> ANY_BIT, když mají stejnou délku typu nebo cílový bitový řetězec je delší (tj. je možná konverze DINT, LINT -> LWORD, ale ne LINT -> DWORD)
- ANY_BIT -> ANY_INT, když mají stejnou délku typu nebo cílový typ int je delší (tj. je možná konverze DWORD, LWORD -> LINT, ale ne LWORD -> DINT)
- ANY_BIT -> ANY_BIT, když mají stejnou délku typu nebo cílový bitový řetězec je delší
- V případě konverze BOOL na jiný bitový řetězec, hodnota BOOL je brána jako nultý bit a doplněna zleva nulami.
- ANY_INT -> ANY_INT, když cílový typ je delší nebo stejné délky a v případě, že nedochází ke ztrátě znaménka
- REAL -> LREAL