Wie gesagt, mit SHL muß man aufpassen, da es keinen Pascal-Befehl für ein "signed shift" gibt. (k.A. warum)
Nein,
shl ist unproblematisch, da sowohl bei shiften als auch bei der Multiplakation die hochsten Bits im Nirvana landen und die Ergebnisse gleich sind (wenn die Checks ausgeschaltet sind).
Problematisch ist
shr, da hier offensichtlich auch bei signed Typen der Assemblerbefehl SHR und nicht SAR benutzt wird:
Delphi-Quellcode:
var
x,y: longint;
begin
x := -10;
y := x shr 1;
writeln(y);
y := x div 2;
writeln(y);
end.
Die Ergebnisse sind 2147483643 und -5. Aber selbst SAR ist noch nicht äquivalent zu div, da zwar -10 SAR 1 = -5 ist aber -1 SAR 1 = -1 und -1 div 2 = 0.