Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
Turbo Delphi für Win32
|
Re: Function für Vorzeichen?
8. Sep 2006, 20:54
Ganz einfach: Wenn er eine 0 oder eine 1 reinkriegt, hat er eine 0 als Ergebnis. Das muss aber eine 1 sein, darum or 1.
@Cöster: Eigentlich hätte ich schreiben sollen eine logisch-arithmetische Operation. Dazu gehören +-*/, div und mod und außerdem not, and, or, xor, shl, shr, sar und vllt hab ich noch welche Vergessen.
Auf Assemblerebene gibts noch ein paar zusätzliche wie z.B. cdq, was allerdings eher ein Cast zu einem Int64 ist.
Diese Operationen bremsen im Gegenteil zu einem if den Prozessor nicht ab. (Pipelining)
Das ist auch der Grund, warum z.B. die Funktion abs nicht mithilfe von Ifs implementiert ist, sondern mit einem cdq und einem xor.
Noch ein Beispiel:
Du willst eine Variable zwischen 0 und 1 umschalten, also wenn a=0 dann a:=1 ansonsten a:=0;
Das könnte man jetzt so machen:
if a=0 then a:=1 else a:=0;
Man könnte es aber auch so machen:
a:=1-a;
Zweiteres geht deutlich schneller.
Zu deinem einen If: 1. lässt sich das auch noch vermeiden und 2. bekommst du mit deiner Funktion NICHT das Vorzeichen.
Manuel Eberl „The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
|