![]() |
AW: Auto hält nicht an roter Ampel
Ein Boolean ist 1 Byte groß und kann somit 256 Werte annehmen.
die Konstanten sind dabei so definiert: für den delphieigenen Boolean True = 1 False = 0 für die Windowstypen ByteBool (ShortInt), WordBool (SmallInt) und LongBool (Integer/LongInt) True = -1 False = 0 wobei es bei der Prüfung aber so lautet True <> 0 False = 0 Tja, nun fällt auch auf, warum es zu Problemen kommen kann
Delphi-Quellcode:
ergibt
if myBoolean = True then
Delphi-Quellcode:
,
if Byte(myBoolean) = 1 then
wärend
Delphi-Quellcode:
intern so
if myBoolean then
Delphi-Quellcode:
aussieht.
if Byte(myBoolean) <> 0 then
|
AW: Auto hält nicht an roter Ampel
Ja, das ist schon klar; was ich meine ist auch bloß, dass hier das Zweiwertigkeitsprinzip der Aussagenlogik in der Delphi-Aussagenlogik nicht mehr erfüllt ist, zumindest dann nicht, wenn es mehr Wahrheitswerte als true und false gibt, oder wenn man mit true und false nicht alle ("2") Fälle abdecken kann. Als Unwissender kann man darüber stolpern. Vor allem als Mathematiker.
|
AW: Auto hält nicht an roter Ampel
Zitat:
Eine Variable die auf einem Bit abgebildet werden müsste wird für TRUE je nach Gusto als $FFFFFFFF oder als 1 abgebildet, ein <> 0 dürfte in jedem Fall der Überprüfung standhalten. Interessanter finde ich dass folgende Konstrukte funktionieren...
Delphi-Quellcode:
const
true=0=1; var b:Boolean; begin b := true; if b then Showmessage('true') else Showmessage('False'); end; wenn man sich vorstellt ein Drittanbieter könne eine derartige Deklaration verwenden.... |
AW: Auto hält nicht an roter Ampel
Ok, das ist schon heftig :wink:.
Und es wird ein bisschen off-topic... Interessant finde ich, dass true offenbar kein reserviertes Wort ist. Die Frage ist: verwendet Delphi jetzt lokal immer Dein selbstdefiniertes true? Sollte es eigentlich, gel? Naja, für logische Ausdrücke kann man ja immerhin stets die Ausdrücke (1=1) für wahr und (0=1) für falsch verwenden, natürlich ohne cast... :-D Caps |
AW: Auto hält nicht an roter Ampel
True und False sind Konstanten.
Und innerhalb eines anderen Gültigkeitsbereich kann man Typen, Konstanten und Variablen lokal neu deklarieren. PS: Es gibt doch 2 Zustände?
Delphi-Quellcode:
und
False
Delphi-Quellcode:
aka =0 und <>0. :angle2:
not False
|
AW: Auto hält nicht an roter Ampel
Zitat:
Ja, aber hier (Delphi) kann gelten:
Code:
a := 2; // (a = not false) ist wahr
b := 1; // (b = not false) ist wahr c := (a = b); // c ist falsch, in der Aussagenlogik wäre c aber wahr (nur wenn a, b Wahrheitswerte sind), // weil immer gilt (not false = not false). // Weil es in der Aussagenlogik keine verschiedenen "not false" geben kann. |
AW: Auto hält nicht an roter Ampel
Zitat:
Code:
a := 2
Bool( a ) => not false ( a = b ) => false ( Bool( a ) = Bool( b ) ) => true |
AW: Auto hält nicht an roter Ampel
Klar, mit einem expliziten Cast funktioniert's natürlich.
Aber ohne Cast kriegt man Probleme, das ist eigentlich schon alles. |
AW: Auto hält nicht an roter Ampel
Wenn es schon ein Auto Objekt gibt, warum gibt es kein Ampel Objekt?
|
AW: Auto hält nicht an roter Ampel
Und vergiß das Straßenobjekt nicht. :)
es geht auch mit rein logischen Mitteln :stupid:
Delphi-Quellcode:
=
if a <> b then
Delphi-Quellcode:
if a xor b then
Delphi-Quellcode:
=
if a = b then
Delphi-Quellcode:
,
if (a and b) or (not a and not b) then
Delphi-Quellcode:
if not (a xor b) then
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 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