![]() |
Delphi-Version: 2005
Unterschied zwischen "not" und "false"?
Hallo!
Gibt es irgenwelche Unterschied zwischen
Delphi-Quellcode:
und
if irgendwas = false then
Delphi-Quellcode:
Sind die beide Methoden gleich schnell?
if not irgendwas then
|
AW: Unterschied zwischen "not" und "false"?
Ob sie gleich schnell sind, kann ich Dir nicht sagen. Allerdings sollte man nie auf true oder false prüfen, da dies zumindest bei true in die Hose gehen kann.
|
AW: Unterschied zwischen "not" und "false"?
Beides ist gleich.
Nur das... Zitat:
|
AW: Unterschied zwischen "not" und "false"?
Ja
Tut man nicht
Delphi-Quellcode:
Das ist korrekt
if irgendwas = false then
Delphi-Quellcode:
Den erzeugten Code kannst du über den Debugger rausfinden.
if not irgendwas then
Wenn der gleich sein sollte (Compilermagic) dann ist es gleich schnell Ansonsten einfach mal die Zeit messen |
AW: Unterschied zwischen "not" und "false"?
Zitat:
Code:
Es ist also EXAKT gleich.
test bl, bl
jnz xxx Wenn man allerdings
Delphi-Quellcode:
macht, wird dies
if (irgendwas = true) then
Code:
und
cmp bl,1
jz xxx
Delphi-Quellcode:
wird
if (irgendwas) then
Code:
Also wie gesagt ist es egal was man bei false macht aber bei true sollte man aufpassen.
test bl,bl
jz xxx |
AW: Unterschied zwischen "not" und "false"?
Das 1. bedeutet ja das Vergleich irgendwas = false true sein muss:
Code:
Das 2. das die Variable negiert wird
irgendwas: false
false = false -> true irgendwas: true false = true -> false
Code:
Das Problem ist das true als <> 0 deklariert ist, also True nicht unbedingt True ist.
irgendwas: false
false -> true irgendwas: true true -> false |
AW: Unterschied zwischen "not" und "false"?
Delphi-Quellcode:
var b: Boolean;
begin Memo1.Lines.Add(''); Memo1.Lines.Add('b := false;'); b := false; if b then Memo1.Lines.Add('if b then'); if not b then Memo1.Lines.Add('if not b then'); if b = false then Memo1.Lines.Add('if b = false then'); if b = true then Memo1.Lines.Add('if b = true then'); Memo1.Lines.Add(''); Memo1.Lines.Add('b := true;'); b := true; if b then Memo1.Lines.Add('if b then'); if not b then Memo1.Lines.Add('if not b then'); if b = false then Memo1.Lines.Add('if b = false then'); if b = true then Memo1.Lines.Add('if b = true then'); Memo1.Lines.Add(''); Memo1.Lines.Add('b := 3;'); b := Boolean(3); if b then Memo1.Lines.Add('if b then'); if not b then Memo1.Lines.Add('if not b then'); if b = false then Memo1.Lines.Add('if b = false then'); if b = true then Memo1.Lines.Add('if b = true then'); end; |
AW: Unterschied zwischen "not" und "false"?
Möchte noch jemand etwas zum Thema "nicht auf true prüfen" beitragen? 55.071 Users left :stupid:
|
AW: Unterschied zwischen "not" und "false"?
Vielen Dank für so viele Anregungen!
Zitat:
|
AW: Unterschied zwischen "not" und "false"?
Hast Du den Code von himitsu einmal ausprobiert?
|
AW: Unterschied zwischen "not" und "false"?
Zitat:
Zitat:
|
AW: Unterschied zwischen "not" und "false"?
Zitat:
![]() |
AW: Unterschied zwischen "not" und "false"?
:shock:
Also, wer so was macht
Delphi-Quellcode:
, der nutzt auch undokumentierte API-Funktionen :lol:. Bei mir sind Bool immer wirklich Bool, dann wäre (ich mach sowas nicht) eine Frage nach true auch ohne Konsequenzen.
b := Boolean(3);
Sherlock |
AW: Unterschied zwischen "not" und "false"?
@Sherlock: das ist nur die Kurzform ... stell dir mal vor du bekommst den Bolean als Result von einem ASM-Code oder irgendeiner anderen externen Quelle ala C++-Code und Co.
|
AW: Unterschied zwischen "not" und "false"?
|
AW: Unterschied zwischen "not" und "false"?
Zitat:
MfG Fabian |
AW: Unterschied zwischen "not" und "false"?
OK, vielen Dank!
|
AW: Unterschied zwischen "not" und "false"?
in den älteren Delphi versionen (ich glaube<6) hängt das von den Definitionen von "true" und "false" ab:
einige API funktionen geben kein Delphi true zurück, sonder eines aus c/c++ das ist dann von mir aus nicht 1 sondern <> 0 |
AW: Unterschied zwischen "not" und "false"?
Zitat:
true (Delphi) = 1, false (Delphi) = 0 true (C) = -1, false (C) = 0 Das kommt daher, weil man für C den Wert Byte($FF) benutzt, bei dem nun mal -1 rauskommt. Bernhard |
AW: Unterschied zwischen "not" und "false"?
Ich programmier jetz schon relativ lange, aber jetz brennt mir doch ne ziemlich primitive frage auf der zunge.
Wie kann ein Byte, welches 8 Bit hat und im wertebereich von 0..255 liegt bei $FF (ist bei mir 255 sogar mitm wincalc (auch wenn ichs so wusste) ) den Wert -1 annhemen? |
AW: Unterschied zwischen "not" und "false"?
-1 hat aber auch bei calc den Byte-Wert FF.
|
AW: Unterschied zwischen "not" und "false"?
Weil bei signed das oberste Bit das Vorzeichen bestimmt
Wegen 0 - Zahl = negative Zahl
Code:
0 - 1 = -1
00000000(1) - 1000000 = 11111111 |
AW: Unterschied zwischen "not" und "false"?
Siehe dazu das
![]() Und das andere: Es ist Definitionssache ;) Wenn du $FF in einen unsigned Byte schreibst, dann hast du 255. Aber in der Regel werden vorzeichenbehaftete Datentypen genommen. Außerdem ist das doch glaub ich andersherum: true = -1 in Delphi oder nicht? MfG Fabian |
AW: Unterschied zwischen "not" und "false"?
Ich habs noch nicht ausprobiert, aber da sollte +1 rauskommen. In Delphi ist der Boolean wohl so definiert:
Delphi-Quellcode:
und damit ist true +1 und false 0.
type Boolean = (false, true);
Bernhard |
AW: Unterschied zwischen "not" und "false"?
Ja aber der Wert wird in einem Byte gespeichert un deshalb sind andere Werte möglich und wie schon gezeigt wurde leifern bestimmte Funktionen andere Werte.
Kurz gesagt ist alles was nich false ist true ( <> 0) |
AW: Unterschied zwischen "not" und "false"?
-1 in einem signed und mit Überlauf in einem unsigned Register (32 Bit) ist $FFFFFFFF ... tja und wenn man dieses auf ein Byte kürzt, dann kommt eben $FF raus.
Abgesehn davon daß viele WinAPIs eh LongBool (32 Bit) nutzen. |
AW: Unterschied zwischen "not" und "false"?
Das hat nichts mit dem Überlauf zu tun, sondern wie oben geschrieben das 0 - eien zahl deren inverses Element ergibt bzw. Zahl + Komplement = 0
|
AW: Unterschied zwischen "not" und "false"?
Um das zu entscheiden, braucht man keinen CPU-View oder ASM-Code.
|
AW: Unterschied zwischen "not" und "false"?
Kleiner Denkfehler:
if not List.IsEmpty bedeutet: Wenn nicht die Liste leer ist -> die Liste ist also nicht leer -> in der Liste ist was drin if List.IsEmpty = false bedeutet: Wenn es falsch ist, dass die Liste leer ist, wobei .IsEmpty glücklicherweise eine Delpi-eigene Funktion ist, wodurch das hier geht, aber nicht schön ist, weil man über das = false beim lesen stolpern könnte. Du willst wohl ausdrücken: Wenn die Liste nicht leer ist, dann...; heißt im Englischen: if the list is not empty. Aus den Kursiv gedruckten Wörtern erschließt sich dann, was man in Delphi dann schreiben muss. Bernhard |
AW: Unterschied zwischen "not" und "false"?
Zitat:
Zitat:
|
AW: Unterschied zwischen "not" und "false"?
jetzt das
Delphi-Quellcode:
.
if not List.IsNotFull then
Tschuldschung, aber ich konnt nicht anders. :oops: Nja, es ist eigentlich recht einfach: > True und False sind Werte/Konstante, welche je "einen" definierten Wert darstellen. > Boolean und Co. sind Variablen, welche unterschiedliche Werte enthalten können, aber es ist so festgelegt, daß 0 = "False" und alles Andere = "True" darstellt. Und jetzt sollte auch klar werden, warum man nicht mit True und False vergleichen soll. True/Wahr gibt es mehrfach, aber die Konstannte stellt nur einen Bruchteil davon dar und man kann demnach nur einen Bruchteil erfolgreich damit vergleichen. |
AW: Unterschied zwischen "not" und "false"?
Zitat:
Delphi-Quellcode:
abgefragt wird. :lol:
if not Nicht_OK
|
AW: Unterschied zwischen "not" und "false"?
Moin,
kann es übrigens sein, dass ein Punkt, warum man false und true umgeht noch nicht genannt wurde? Und zwar wird ja in einer if-Bedingung ein Boolean-Wert erwartet:
Delphi-Quellcode:
Und wenn der Boolean Wert wahr ist, führt er bestimmten Code aus.
if true then
Das heißt wiederum, dass ein Test auf false aber besonders auf true doppelt ist:
Delphi-Quellcode:
Nagut bei false trifft das nicht direkt zu, aber dennoch braucht man in der Regel kein Vergleich mit Wahrheitswerten, sondern kann immer mit Operatoren negieren o.ä. um das zu erreichen.
if x = true then // Ist quasi: Wenn (x = true) = true dann
MfG Fabian |
AW: Unterschied zwischen "not" und "false"?
Zitat:
|
AW: Unterschied zwischen "not" und "false"?
Strg+Alt+C (das geht in jedem Delphi) oder mal oben im Menü suchen (Ansicht > Debug > CPU).
|
AW: Unterschied zwischen "not" und "false"?
Bei mir ist der Button, welcher zum obigen Shortcut gehört, durchgehend deaktiviert.
|
AW: Unterschied zwischen "not" und "false"?
Das läßt sich komischwer Weise nur wärend des Debuggens anzeigen/einblenden.
Zeigt aber sowieso nur Was an, wärend ein Programm angehalten ist. |
AW: Unterschied zwischen "not" und "false"?
Kleiner Nachtrag zu (-1) $FF.
Wenn man Integer "nur" zum Rechnen nutzt, dann werden $FF oder $FFFF eigentlich nie als neg. Werte erkannt. Für mich sind negative Werte, wie auch Buchstaben, eine Interpretationssache. Gruß K-H |
AW: Unterschied zwischen "not" und "false"?
Du brauchst aber nur eine externe Funktion erwischen die -1 (signed) zurückgibt, dann wird es signed als 255 interpretiert, was dann zwar True im Sinne von <> 0 aber nicht True im Sinne von 1 ist.
|
AW: Unterschied zwischen "not" und "false"?
Bissel OT aber:
wenn man die CONST Deklaration in einer anderen unit "versteckt" kann man jemanden denke ich ordentlich ärgern.....
Delphi-Quellcode:
procedure TForm5.Button1Click(Sender: TObject); Const true=false; Var Test:Boolean; begin Test := true; if Test then Showmessage('true') else Showmessage('false'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz