AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

bool'sches Verständigungsproblem

Offene Frage von "programmierer"
Ein Thema von programmierer · begonnen am 10. Okt 2007 · letzter Beitrag vom 10. Okt 2007
Antwort Antwort
Benutzerbild von programmierer
programmierer

Registriert seit: 27. Jan 2006
Ort: Dresden
18 Beiträge
 
Delphi 2005 Personal
 
#1

bool'sches Verständigungsproblem

  Alt 10. Okt 2007, 20:20
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:
if (sel <> (117 AND -1) then
  if ( (i AND j) in [0..7] ) then
   [...]
Wenn angenommen (sel = -1) ist, dann ergibt die erste Abfrage true. (sollte false sein)
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:
if (sel <> (117 OR -1) then
  if ( (i OR j) in [0..7] ) then
bzw.
Delphi-Quellcode:
if (sel <> 117) AND (sel <> -1) then
  if ( (i in [0..7]) AND (j in [0..7])) then
funktioniert es.

Habe ich da jetzt einen Denkfehler?
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?

So denke ich das jedenfalls, aber anscheinend habe ich da irgendwo einen Denkfehler drin, den ich im Moment nicht finde!

Bitte um Aufklärung
Stanley F.
Wenn alles gut zu gehen scheint, hast Du sicher etwas vergessen.
  Mit Zitat antworten Zitat
Neotracer64

Registriert seit: 27. Okt 2004
292 Beiträge
 
Delphi 7 Professional
 
#2

Re: bool'sches Verständigungsproblem

  Alt 10. Okt 2007, 20:29
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:
http://de.wikipedia.org/wiki/Bitweiser_Operator
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#3

Re: bool'sches Verständigungsproblem

  Alt 10. Okt 2007, 20:33
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:
4 and 2 =>
100 and 010 =>
110 => 6
Ergebnis ist, dass 4 = 6 falsch ist.

Binär mit or:
Zitat:
4 or 2 =>
100 or 010 =>
110 => 6 (okay schlechtes Beispiel)
MfG
xZise

[redbox]117 and -1 = 117?
Das würde ich bezweifeln:
Wir erstellen einen 4bitter mit Vorzeichen:
Zitat:
0000 = 0
1. Bit = Vorzeichen
2. - 4. Bit = Zahl
Also machen wir mal (7 and -1):
Zitat:
0111 = 7
1001 = -1
1111 = -7 => Ergebnis ist nicht 7
[/redbox]
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Neotracer64

Registriert seit: 27. Okt 2004
292 Beiträge
 
Delphi 7 Professional
 
#4

Re: bool'sches Verständigungsproblem

  Alt 10. Okt 2007, 20:37
32 Bit Größe -> Dword. Und Zweierkomplement.

Zitat:
00000000000000000000000001110101 //117
11111111111111111111111111111111 // -1
================================
00000000000000000000000001110101


Zum Nachlesen:
http://de.wikipedia.org/wiki/Zweierkomplement
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#5

Re: bool'sches Verständigungsproblem

  Alt 10. Okt 2007, 20:43
Zitat von xZise:
okay schlechtes Beispiel
Nicht schlecht, aber falsch gerechnet. 4 and 2 = 0

Code:
&|0 1
-+---
0|0 0
1|0 1
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von programmierer
programmierer

Registriert seit: 27. Jan 2006
Ort: Dresden
18 Beiträge
 
Delphi 2005 Personal
 
#6

Re: bool'sches Verständigungsproblem

  Alt 10. Okt 2007, 20:51
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
Stanley F.
Wenn alles gut zu gehen scheint, hast Du sicher etwas vergessen.
  Mit Zitat antworten Zitat
Neotracer64

Registriert seit: 27. Okt 2004
292 Beiträge
 
Delphi 7 Professional
 
#7

Re: bool'sches Verständigungsproblem

  Alt 10. Okt 2007, 20:57
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.
  Mit Zitat antworten Zitat
Benutzerbild von programmierer
programmierer

Registriert seit: 27. Jan 2006
Ort: Dresden
18 Beiträge
 
Delphi 2005 Personal
 
#8

Re: bool'sches Verständigungsproblem

  Alt 10. Okt 2007, 21:03
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!?
Stanley F.
Wenn alles gut zu gehen scheint, hast Du sicher etwas vergessen.
  Mit Zitat antworten Zitat
Neotracer64

Registriert seit: 27. Okt 2004
292 Beiträge
 
Delphi 7 Professional
 
#9

Re: bool'sches Verständigungsproblem

  Alt 10. Okt 2007, 21:07
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz