![]() |
bool'sches Verständigungsproblem
Guten Abend!
Ich sitze gerade an einem Spiel und habe ein Problem, wenn man es so nennen will. Es funktioniert zwar bis jetzt alles einwandfrei, aber ich verstehe nicht warum ^^ Folgendes:
Delphi-Quellcode:
Wenn angenommen (sel = -1) ist, dann ergibt die erste Abfrage true. (sollte false sein)
if (sel <> (117 AND -1) then
if ( (i AND j) in [0..7] ) then [...] Wenn i oder j z.B. 10 ist, dann ergibt auch die zweite Abfrage true. (sollte ebenfalls false sein) Das verstehe ich nicht so ganz, denn wenn ich schreibe
Delphi-Quellcode:
bzw.
if (sel <> (117 OR -1) then
if ( (i OR j) in [0..7] ) then
Delphi-Quellcode:
funktioniert es.
if (sel <> 117) AND (sel <> -1) then
if ( (i in [0..7]) AND (j in [0..7])) then Habe ich da jetzt einen Denkfehler? :gruebel: Kann mir mal bitte jemand erklären, warum (sel <> (117 AND -1)) nicht das gleiche ist wie (sel <> 117) AND (sel <> -1) ?? Meines Erachtens darf sel in beiden Fällen nicht 117 UND nicht -1 sein, um die gesamte Aussage auf true zu setzen. Und bei (sel <> (117 OR -1)) muss doch theoretisch nur eine Bedinung erfüllt sein: Also wenn (sel = -1) ist, ist (sel <> 117) immer noch erfüllt und durch das OR wird die Aussage wahr, oder nicht? :wiejetzt: So denke ich das jedenfalls, aber anscheinend habe ich da irgendwo einen Denkfehler drin, den ich im Moment nicht finde! :coder2: Bitte um Aufklärung :warn: |
Re: bool'sches Verständigungsproblem
Was du da zum Teil durchführst ist beispielweise eine bitweise AND-Operation.
Nehmen wir mal den Ausdruck "(117 AND -1)". Da kommt die Zahl 117 raus und kein Boolean-Wert. Dann wird aus deinem Ausdruck "if (sel <> (117 AND -1)) then ..." ein "if (sel <> 117) then ..." Zum testen:
Delphi-Quellcode:
var int: Integer;
begin int := (117 and -1); ShowMessage(IntToStr(int)); Zum nachlesen: ![]() |
Re: bool'sches Verständigungsproblem
Leider unterstüzt Delphi nicht direkt einen Wert auf mehrere Werte zu überprüfen.
Einzige Ausnahme ist case, aber das steht nicht zur debatte. Ansonsten gibts hier ein Tutorial zu Binäroperationen (oder so xD). Als würde 117 AND -1 einen ganz neuen Wert liefern. Dieser wird mit "sel" getestet: Beispiel: 4 = (4 AND 2) Binär: Zitat:
Binär mit or: Zitat:
xZise [redbox]117 and -1 = 117? Das würde ich bezweifeln: Wir erstellen einen 4bitter mit Vorzeichen: Zitat:
Zitat:
|
Re: bool'sches Verständigungsproblem
32 Bit Größe -> Dword. Und Zweierkomplement.
Zitat:
Zum Nachlesen: ![]() |
Re: bool'sches Verständigungsproblem
Zitat:
Code:
&|0 1
-+--- 0|0 0 1|0 1 |
Re: bool'sches Verständigungsproblem
OK, das mit (sel <> (117 AND -1) ) ist klar. Ist es das gleiche mit der zweiten Abfrage auch, oder läuft es dort wieder anders?
Ich werde mir gleich mal die angegebenen Wikipedia-Artikel durchlesen. Danke |
Re: bool'sches Verständigungsproblem
NOT, AND, OR und XOR sind in Delphi gleichzeitig entweder logische oder bitweise Operatoren.
Wenn du zwei Boolean Werte/Ausdrücke mit diesen verknüpfst, dann erhälst du auch ein Wahrheitswert als Ergebnis. Verknüfpst du dagegen zwei Zahlenwerte erhälst du jeweils das Ergebnis der bitweisen Operation. |
Re: bool'sches Verständigungsproblem
ok, alles klar.
Also gibt es auch in Delphi keine Speziellen Operatoren für so ein Beispiel? Da muss ich alles auseinander nehmen und einzeln aufschreiben!? |
Re: bool'sches Verständigungsproblem
Ja.
So wie du es hier [1] schonmal hattest ist es richtig: [1]
Delphi-Quellcode:
if (sel <> 117) AND (sel <> -1) then
if ( (i in [0..7]) AND (j in [0..7])) then |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:04 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