W1012 Konstantenausdruck verletzt untere Grenzen

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Fehler- und Warnungsmeldungen (Object Pascal) - Index


Diese Meldung tritt auf, wenn eine Umwandlung durchgeführt wurde, die früher gültig war, aber jetzt wegen der Einführung der großen vorzeichenlosen Typen in Object Pascal (nach der Version Object Pascal 4) ungültig ist.

Zum Beispiel:

 var
    x: Integer;
 const
    y = Cardinal(MaxInt) + 1;
 begin
    x := y;
    Writeln(y); // schreibt 2147483648 
    Writeln(x); // schreibt -2147483648
 end.

Bevor Cardinal als vorzeichenloser 32-Bit-Integer definiert wurde (vor Object Pascal 4), war Cardinal ein vorzeichenloser 31-Bit-Integer mit dem Bereich 0..MaxInt. Jeder Wert im Bereich von Cardinal passte also in einen Integer. Seit Object Pascal 4 verfügt Cardinal über den vollständigen 32-Bit-Bereich von 0..$FFFFFFFF. Die obere Hälfte dieses Bereichs kann nicht in einen Integer konvertiert werden; sehr hohe Werte von Cardinal (größer als MaxInt) werden daher in negative Integer-Zahlen konvertiert, entsprechend der Unterschiede, wie vorzeichenbehaftete (Zweierkomplement) und vorzeichenlose Integer interpretiert werden.

Siehe auch