Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem Klammern (https://www.delphipraxis.net/115714-problem-klammern.html)

Gehstock 16. Jun 2008 21:46


Problem Klammern
 
wie wird folgende Klammer behandelt

Delphi-Quellcode:
if (b and X) = 0 then begin
        showmessage('bc - '+inttostr(b)+' - '+inttostr(X));//kontrolle  Ausgabe [b]bc - 5 - 2[/b] sollte also keinen Fehler ausgeben
         showmessage('Segment fehlt');
        end

dachte das es das selbe sein sollte
wie
Delphi-Quellcode:
if (b = 0 ) and (X = 0 ) then begin
        showmessage('bc - '+inttostr(b)+' - '+inttostr(X));//kontrolle  
         showmessage('Segment fehlt');
        end
oder irre ich mich da weil der 2. Code keinen Fehler ausgibt

mkinzler 16. Jun 2008 21:50

Re: Problem Klammern
 
Welchen Typen haben b und x?

Nikolas 16. Jun 2008 21:51

Re: Problem Klammern
 
Im oberen Fall wird getestet, ob b und X beide true ergeben. Das ergebniss ist dann ein Wahrheitswert der mit 0 verglichen wird.

Unten testest du, ob sowohl b als auch X null sind.

Fussball-Robby 16. Jun 2008 22:00

Re: Problem Klammern
 
Wenn x und B Integer sind (was ich vermute) ist and ein Operator der b und x Binär mit AND verknüpft.
Beim 2. Code ergibt die 1.Klammer einen Boolean-Wert und die 2. auch, sodass 2 Boolean-Werte da sind, dann ergibt and true, wenn beide wahr sind.

bluesbear 16. Jun 2008 22:03

Re: Problem Klammern
 
Falls b und X Integer sind, dann ist z.B. für b=2 und X=1 (b and X) = 0

Gehstock 16. Jun 2008 22:06

Re: Problem Klammern
 
ja sind beides Integer

Fussball-Robby 16. Jun 2008 22:07

Re: Problem Klammern
 
Jupp, dann werden die Binär mit AND verknüpft, die 1. Variante kann also nicht funktionieren.

thabaker 16. Jun 2008 22:15

Re: Problem Klammern
 
die erste Variante sollte wohl so was wie ein "Abkürzung" der Zweiten sein, die besagt: "wenn beide Zahlen 0 sind".
Wenn nun in der Ersten stehen würde
Code:
if (b or X) = 0 then
hat man dieselbe Aussage. Dann müsste nur das "and" durch ein "or" ersetzt werden.

Fussball-Robby 16. Jun 2008 22:27

Re: Problem Klammern
 
Delphi-Quellcode:
if (b or X) = 0 then
Damit das aber jetzt auch verstanden wird, erläuter ich das kurz noch mal, da sonst vielleicht etwas falsch interpretiert wird.
Bei or wird beim Ergebnis ein Bit gesetzt, wenn bei mindestens einer der Zahlen an der Stelle ein Bit gesetzt ist. Macht man z.B. 3 or 5 sieht das so aus:
Code:
011   <- 3
101   <- 5
---
111
Da an jeder Stelle bei mind. einer Zahl eine 1 steht, steht die 1 auch im Ergebnis. Wenn jetzt 0 rauskommen soll, darf beim Ergebnis kein Bit gesetzt sein. Und das Geht nur, wenn die beiden Zaheln 0 sind:
Code:
0
0
--
0
Denn wenn auch nur ein Bit gesetzt wäre, würde etwas höheres als 0 rauskommen.

Hoffe, du hast es jetzt ein wenig besser verstanden :wink:

RavenIV 17. Jun 2008 08:07

Re: Problem Klammern
 
Also ich sehe das anderst.

if (b and X) = 0 then
daraus resultiert:
if (b = True) and (X = True) = 0 then
Da True nichts anderes als "grösser oder gleich 1" ist, wird geprüft, ob b und X grösser oder gleich 1 sind.
Je nach Wert der Variablen kommt dann z.B so was raus:
if (True) and (False) = 0 then
Das and hat Vorrang, daher wird daraus:
if True = 0 then
Somit wird der if-Zweig nicht ausgeführt, weil True nicht gleich 0 ist.

Oder ist da ein Denkfehler drin?
Ich alsse mich gerne belehren...


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:55 Uhr.
Seite 1 von 2  1 2      

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