![]() |
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:
oder irre ich mich da weil der 2. Code keinen Fehler ausgibt
if (b = 0 ) and (X = 0 ) then begin
showmessage('bc - '+inttostr(b)+' - '+inttostr(X));//kontrolle showmessage('Segment fehlt'); end |
Re: Problem Klammern
Welchen Typen haben b und x?
|
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. |
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. |
Re: Problem Klammern
Falls b und X Integer sind, dann ist z.B. für b=2 und X=1 (b and X) = 0
|
Re: Problem Klammern
ja sind beides Integer
|
Re: Problem Klammern
Jupp, dann werden die Binär mit AND verknüpft, die 1. Variante kann also nicht funktionieren.
|
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:
hat man dieselbe Aussage. Dann müsste nur das "and" durch ein "or" ersetzt werden.
if (b or X) = 0 then
|
Re: Problem Klammern
Delphi-Quellcode:
Damit das aber jetzt auch verstanden wird, erläuter ich das kurz noch mal, da sonst vielleicht etwas falsch interpretiert wird.
if (b or X) = 0 then
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:
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:
011 <- 3
101 <- 5 --- 111
Code:
Denn wenn auch nur ein Bit gesetzt wäre, würde etwas höheres als 0 rauskommen.
0
0 -- 0 Hoffe, du hast es jetzt ein wenig besser verstanden :wink: |
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... |
Re: Problem Klammern
Was Robby beschrieben hat, stimmt haargenau.
|
Re: Problem Klammern
Zitat:
Gruß Gammatester |
Re: Problem Klammern
Zitat:
da x und b integer sind werden diese beiden Zahlen binär über den AND Opperator verknüpft. x = 0 b = 0
Code:
if (x AND b) = 0 währe also wahr
. 000
AND 000 --- 000 x = 1 b = 0
Code:
if (x AND b) = 0 währe also wahr
. 001
AND 000 --- 000 x = 3 b = 5
Code:
if (x AND b) = 0 währe nicht wahr
. 011
AND 101 --- 001 |
Re: Problem Klammern
Zitat:
Zitat:
Belehrung erfolgreich. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22: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 by Thomas Breitkreuz