Delphi rechnet immer erst mit dem QuellTyp weiter, bzw. mit dem kleinsten "gemeinsamen" Typ, der bei der jeweiligen Teiloperation nötig ist.
LongWord >
Negation Unäre Operation > LongWord (und das kann nicht negativ sein) > Zuweisung > Integer/LongInt (da Zieltyp = Integer)
Delphi-Quellcode:
i := -Integer(W); // geht nur, wenn W < 2 Milliarden (maximal 31 Bit genutzt)
i := -Int64(W); // falls an "richtig" rechnen muß
// oder du schaltest die Bereichsprüfung ab, bzw. bzw gezielt dort an, wo sie auch nötig ist