Hallo Union,
Zitat von
Union:
Das ist dem Shr vollkommen piepegal, der schiebt einfach.
...und schiebt vorne
immer ein 0-Bit nach. Der Compiler darf bei der Division einer vorzeichenbehafteten Zahl (Start und Stop haben im Beispiel den Typ "Integer") durch eine Zweierpotenz das DIV nicht durch SHR ersetzen, weil auch negative Werte vorkommen
können. Diese Werte wären nach der Schiebeoperation aber plötzlich positiv, weil das Vorzeichenbit durch SHR nicht dupliziert wird, wie dies bei SAR der Fall ist. Ein Compiler kann nicht wissen, dass dieser Fall zur Laufzeit nicht eintreten wird. Der Programmierer könnte das abschätzen und den geeigneten Datentyp "Cardinal" wählen. In diesem Fall führt der Delphi-Compiler auch die Optimierung durch - jedenfalls dann, wenn links und rechts vom Zuweisungsoperator unterschiedliche Variablen stehen.
Gruß Hawkeye