Entwickler-Ecke

Algorithmen, Optimierung und Assembler - <> oder > bei Vergleich


Regan - Di 01.04.08 19:17
Titel: <> oder > bei Vergleich
Moin,

ich habe jetzt hier mal eine Frage bezüglich des im Titel geschilderten Problems. Die Sache ist Folgende: Ich habe eine ListView/-Box. Sagen wir, die hat 4 Einträge. Für gewöhlich würde ich, um zu überprüfen, ob ein Eintrag ausgewählt ist, folgenden Code nehmen:

Delphi-Quelltext
1:
if ListView1.Itemindex<>-1 then                    

Allerdings habe ich mir in letzter Zeit mal Quelltexte anderer Entwickler angeschaut und da habe ich folgendes gefunden:

Delphi-Quelltext
1:
if ListView1.Itemindex>-1 then                    

Meine Frage ist jetzt: Was ist davon effektiver? Ich weiß, dass es sich nur um zehntel Sekunden handeln kann.

MfG
Regan


F34r0fTh3D4rk - Di 01.04.08 19:20

hi,

das zweite ist auf jedenfall "richtiger", da der Index bei minimal 0 liegen muss um gültig zu sein.
Wahrscheinlich sind es auch nicht zehntel Sekunden, nicht mal hundertstel.

mfg


Regan - Di 01.04.08 19:26

Danke für deine Antwort.
user profile iconF34r0fTh3D4rk hat folgendes geschrieben:
da der Index bei minimal 0 liegen muss um gültig zu sein.

Du meinst also, um auch Werte wie -2 auszuschließen. OK. Dann werde ich mir das mal angewöhnen.


BenBE - Di 01.04.08 19:55

Code-Mäßig sieht das beides auch auf ASM-Ebene ähnlich aus; macht dort zeitlich keinen Unterschied.

Anders sieht es aber in Bezug auf die Richtigkeit aus: Die variante Index > -1 ist die richtige, da sie Index < 0 ausschließt, was ein Ungleich nicht macht.

Zur Performance:

Wenn sich Index aus einer Berechnung ergibt, lässt sich > -1 durch eine einfache Abfrage Non-Carry\Carry auswerten, während Ungleich in diesem Fall ein explizites Compare benötigen würde.

Also: Die richtige Version verwenden: Die ist sogar schneller :P


Regan - Di 01.04.08 19:59

user profile iconBenBE hat folgendes geschrieben:
Also: Die richtige Version verwenden: Die ist sogar schneller :P

Sehr interessant. Da werde ich das mal anpassen müssen.