Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Verneinte If-Abfrage


HenryHux - Mi 15.06.11 14:24
Titel: Verneinte If-Abfrage
Hey, habe mich immer gewundert, dass meine Experimente nicht das machen, was sie sollen.
Dabei liegt es wohl an den einfachsten Grundlagen.
Könnt ihr mir mal bitte erklären, wieso das hier einen Unterschied macht?

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  
  Len := 1;
  if not (len < 3then showmessage('true')
  else showmessage('false');

  Len := 1;
  if (not len < 3then showmessage('true')
  else showmessage('false');


Ich versteh die Logik dahinter nicht :D

lg


jaenicke - Mi 15.06.11 14:30

Naja, im ersten Fall wird das not auf den boolschen Wert "len < 3" angewendet: nicht "Ist die Länge kleiner als 3 oder nicht?"

Im zweiten Fall schaust du ob "not len" bitweise negiert kleiner als 3 ist. Wenn du also die Zahl 2 hast, ist das binär geschrieben 00000010, dann wird da ausgewertet:

Quelltext
1:
2:
3:
4:
5:
6:
if (not len < 3) then
-->
if (not 00000010 < 3) then
-->
if 11111101 < 3 then
...


Nersgatt - Mi 15.06.11 14:30

Bei Deinem ersten Versuch wird das (Boolsche) ergebniss des Ausdrucks "(len < 3)" genottet (das Wort lass ich mir patentieren).
Beim 2. Versuch, wird die Variable len (vermutlich Integer) genottet.


HenryHux - Mi 15.06.11 14:35

Ok, danke.
Hat mich nicht nur Zeit gekostet.
Auf sowas muss man dann erstmal kommen :D

Danke,

lg


jaenicke - Mi 15.06.11 15:03

Wenn du nicht weißt welcher Operator priorisiert wird, klammere einfach immer wie du es meinst, dann kann nichts passieren. ;-)