if und >=
swap
- programmiertechnik
Hallo,
diese anweisung:
if(a >= 10)
heisst doch soviel wie "Grösser oder Gleich 10".
Aber das sind doch 2 bedingungen die geprüft werden.
Ist das nur die Kurzschreibweise von z.b:
if a > 10 OR a = 10 Then
'tu was
Eine If schleife kann doch nur auf TRUE und FALSE Prüfen aber in der oben genannten schreibweise prüft die IF doch auf 2 Bedingungen Grösser oder Gleich...
Was ist denn nun richtig?
(Sorry, Arbeite schon immer mit If-Schleifen aber diese frage kommt jetzt ganz spontan auf...)
Eine If schleife kann doch nur auf TRUE und FALSE Prüfen aber in der oben genannten schreibweise prüft die IF doch auf 2 Bedingungen Grösser oder Gleich...
Was ist denn nun richtig?
(Sorry, Arbeite schon immer mit If-Schleifen aber diese frage kommt jetzt ganz spontan auf...)
Hallo Swap.
Keep cool, wäre vielleicht eine Antwort.
Im grunde hast du Recht: Die 'korrekte' Schreibweise wäre.
if (a == 10 || a > 10) ...
Aber die Schreibweise if (a >= 10)
ist halte eine verkürzte schreibweise und völlig OK.
Macht auch den Code etwas übersichtlicher, finde ich.
Gruß, Karl
Hallo Karl,
Keep cool, wäre vielleicht eine Antwort.
Immer!
Im grunde hast du Recht: Die 'korrekte' Schreibweise wäre.
if (a == 10 || a > 10) ...
Aber die Schreibweise if (a >= 10)
ist halte eine verkürzte schreibweise und völlig OK.
Macht auch den Code etwas übersichtlicher, finde ich.
Yep ist auch gut so ;)
Aber ist das bei allen Programmiersprachen so?
Weil so wie ich es kenne kann eine If nur auf 1 TRUE oder 1 FALSE prüfen. >= sind doch schon 2 Prüfungen..... also wird diese weise intern in der jeweiligen Programmiersprache abgemacht?
echo $begrüßung;
Aber ist das bei allen Programmiersprachen so?
Nein, garantiert nicht. Aber bei allen, bei denen >= "größer oder gleich" bedeutet.
Weil so wie ich es kenne kann eine If nur auf 1 TRUE oder 1 FALSE prüfen. >= sind doch schon 2 Prüfungen..... also wird diese weise intern in der jeweiligen Programmiersprache abgemacht?
Wenn es dir besser lesbarer erscheint, schreibe doch einfach: if (a > 9)
echo "$verabschiedung $name";
Moin!
Wenn es dir besser lesbarer erscheint, schreibe doch einfach: if (a > 9)
Das ist nicht dasselbe!
a >= 10 ist wahr für alle Werte ab 10 (inklusive).
a > 9 ist wahr für alle Werte ab 9,000000000000000000000000000....
Deine Aussage stimmt also nur, wenn a ausschließlich Integer-Werte annehmen kann. Davon ist aber nichts bekannt.
- Sven Rautenberg
Hi,
if(a >= 10)
heisst doch soviel wie "Grösser oder Gleich 10".
ja. Üblicherweise sagt man aber "größer gleich" ...
Aber das sind doch 2 bedingungen die geprüft werden.
... weil es genau eine Bedingung ist. Das "oder" entstammt Deiner Vorstellung.
Eine If schleife
Ist dieses "schleife" der Konjunktiv von "schleifen"? Irgendwie scheint es sich nämlich eingeschliffen zu haben, eine if-Bedingung habe irgend etwas mit Schleifen zu tun. Den Grund dafür finde ich nicht, egal welche Schleifen meine Gedanken ziehen.
kann doch nur auf TRUE und FALSE Prüfen aber in der oben genannten schreibweise prüft die IF doch auf 2 Bedingungen Grösser oder Gleich...
Selbst wenn es zwei Bedingungen wären, wären diese nur Einzelteile der _einen_ Oder-Bedingung.
(Sorry, Arbeite schon immer mit If-Schleifen
Ich habe noch nie in meinem Leben eine if-Schleife gesehen. Außer in http://forum.de.selfhtml.org/archiv/2005/3/t104287/#m642940, versteht sich.
Cheatah
gudn tach!
(Sorry, Arbeite schon immer mit If-Schleifen
Ich habe noch nie in meinem Leben eine if-Schleife gesehen. Außer in http://forum.de.selfhtml.org/archiv/2005/3/t104287/#m642940, versteht sich.
dann hast du das posting </archiv/2004/9/t90684/#m544188> uebersehen.
prost
seth
Hallo,
diese anweisung:
if(a >= 10)
heisst doch soviel wie "Grösser oder Gleich 10".
Aber das sind doch 2 bedingungen die geprüft werden.
Ist das nur die Kurzschreibweise von z.b:
if a > 10 OR a = 10 Then
'tu was
Stimmt soweit. Allerdings sind >= und <= auch in der Mathematik völlig normal und werden üblicherweise nicht aufgelöst.
Eine If schleife kann doch nur auf TRUE und FALSE Prüfen aber in der oben genannten schreibweise prüft die IF doch auf 2 Bedingungen Grösser oder Gleich...
Ganz einfach: Der Ausdruck mit dem OR wird erst mal ausgewertet. Das ist einfache Aussagenlogik. Zur Erklärung die Wahrheittabelle der OR-Verknüpfung (0 entspricht false, 1 true):
a | b | a OR b
--|---|-------
0 | 0 | 0
--|---|-------
0 | 1 | 1
--|---|-------
1 | 0 | 1
--|---|-------
1 | 1 | 1
Genauso funktioniert dass bei AND und eben komplexeren Ausdrücken...
Das herauszufinden überlasse ich dir ;-)
Gruß
Stareagle
Was ist denn nun richtig?
(Sorry, Arbeite schon immer mit If-Schleifen aber diese frage kommt jetzt ganz spontan auf...)
Danke für deine Mühe!
Jetzt wird es doch schon klarer!
Noch ein kleiner Nachtrag bezüglich der Operatoren für OR und AND: Bei einigen Programmiersprachen z.B. Java (afaik) gibt dafür zwei Möglichkeiten. Am Beispiel OR: Einmal "|" und "||".
Der Unterschied ist folgender:
Bei "|" werden die beiden verknüpften Ausdrücke in jedem Fall ausgewertet, bei "||" wird der zweite Ausdruck nicht mehr ausgewertet, wenn er nicht relvant ist. Eine OR-Verknüpfung ist ja TRUE, wenn einer der beiden Ausdrücke TRUE ist. Ist jetzt der erste Ausdruck TRUE, wird der zweite gar nicht mehr ausgewertet. Bei AND (mit "&" und "&&" ist es analog).
Gruß
Stareagle
Moin Kameraden,
Am Beispiel OR: Einmal "|" und "||".
Bei "|" werden die beiden verknüpften Ausdrücke in jedem Fall ausgewertet, bei "||" wird der zweite Ausdruck nicht mehr ausgewertet, wenn er nicht relvant ist.
Das ist in C auch so. Aber nur deshalb, weil zwischen '|' und '||' ein Unterschied in der Bedeutung existiert:
'||', '&&': Logisches (boolsches) oder/und
'|', '&': Bitweises (arithmetisches) oder/und
Bei den Doppel-Symbolen werden die Operanden nur daraufhin ausgewertet, ob sie ungleich Null sind. Das Ergebnis ist die Boolsche Verknüpfung des Operanden; hier wird der zweite Operand tatsächlich nicht ausgewertet, wenn das Ergebnis schon durch den ersten feststeht.
Bei den Einzel-Symbolen werden die Operanden dagegen als Integerwerte betrachtet und Bit für Bit verknüpft. So ergibt dann z.B.
157 & 82 = 80
denn 157 = 1 0 0 1 1 1 0 1
82 = 0 1 0 1 0 0 1 0
------------------------
AND: 80 = 0 1 0 1 0 0 0 0
Bei dieser bitweisen Verknüpfung werden auf jeden Fall beide Operanden ausgewertet, weil das Ergebnis in aller Regel auch von beiden abhängt.
Meine Vermutung ist, dass Java auch den Unterschied zwischen bitweiser und logischer Verknüpfung macht, und die "shortcut evaluation" nur deshalb bei '&&' und '||' nicht verwendet wird.
So long,
Martin
Hallo Martin.
So ergibt dann z.B.
157 & 82 = 80
denn 157 = 1 0 0 1 1 1 0 1
82 = 0 1 0 1 0 0 1 0
------------------------
AND: 80 = 0 1 0 1 0 0 0 0
Bei ist 157 & 82 = 16
denn 157 = 1 0 0 1 1 1 0 1
82 = 0 1 0 1 0 0 1 0
------------------------
AND: 80 = 0 0 0 1 0 0 0 0
Einen schönen Freitag noch.
Gruß, Mathias
Hallo Mathias,
So ergibt dann z.B.
157 & 82 = 80
Bei ist 157 & 82 = 16
Wo du recht hast ... ;-)
Hast du auch die zweite Stelle gefunden, an der ich mich vertan habe?
Meine Vermutung ist, dass Java auch den Unterschied zwischen bitweiser und logischer Verknüpfung macht, und die "shortcut evaluation" nur deshalb bei '&&' und '||' nicht verwendet wird.
Hier hätten natürlich wieder die Einzelsymbole '&' und '|' stehen müssen.
So long,
Martin
Hello,
Eine If schleife kann doch nur auf TRUE und FALSE Prüfen aber in der oben genannten schreibweise prüft die IF doch auf 2 Bedingungen Grösser oder Gleich...
ich darf mir noch erlauben das mit meinen in diesem Bereich zwar nicht so weit ausgereiften Kenntnissen dennoch kurz auszuführen. Diese >= Operatoren sind keine Erfindung der höheren Programmiersprachen, sondern tatsächlich auf Maschinenebene in Hardware gegossen. Dazu muss man sich kurz vor Augen führen, wie if-Abfragen auf Maschinenebene geregelt sind, nämlich als umgekehrte Sprunganweisungen, d.h. anstatt zu schreiben "wenn diese bedingung stimmt, dann machen wir folgendes" ist die Logik in Assembler invers, man schreibt "wenn diese Bedingung nicht stimmt, dann springe bitte nach vorne zu...".
Wenn man sich jetzt beispielsweise das Instruction Listing der x86er Prozessoren anschaut, dann findet man dort genau dies Art von Anweisungen, dort bezeichnet als "Jump if <condition>" - gültige Conditions sind z.B. JGE wie Jump if Greater or Equal.
MfG
Rouven