Forum: Object-Pascal / Delphi-Language
Delphi
by 3_of_8,
29. Aug 2007
Also, ganz langsam:
Bei allen vorzeichenbehafteten Typen gilt die Regel -x=not x + 1. Jedenfalls bei allen auf x86-Prozessoren, und ich vermute mal, bei so ziemlich allen anderen verbreiteten Binärprozessoren auch, weil so ziemlich alle das Zweierkomplement verwenden.
cdq eax schreibt das Vorzeichenbit von eax in alle Bits von edx. cdq steht für "Convert to quad word", es führt also...
Forum: Object-Pascal / Delphi-Language
Delphi
by 3_of_8,
29. Aug 2007
@frank: Nicht nur exotisch, sondern auch falsch.
-1: $FFFFFFFF
Oberstes Bit auf 0 gesetzt:
$7FFFFFFF
Und $7FFFFFFF ist 2^31-1, also ungefähr 2 Mrd. und nicht, wie gewünscht, 1.
Wenn schon, dann müsste man es so machen:
if x<0 then x:=not x + 1;
Forum: Object-Pascal / Delphi-Language
Delphi
by 3_of_8,
29. Aug 2007
...wobei abs() um einiges schneller ist. Wenn der Compiler es inlinet (was er vermutlich tun wird), braucht es sogar nur 3 Assemblerbefehle (bei Integern, bei Float wäre es ein FPU-Befehl), und zwar ein cdq, ein xor und ein sub. Ein if und eine Subtraktion sind dadurch langsamer.
Forum: Object-Pascal / Delphi-Language
Delphi
by 3_of_8,
29. Aug 2007
uses System? O_o
Phoenix, war das ironisch gemeint? Wenn nein, System ist IMMER eingebunden.