swap: if und >=

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...)

  1. 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

    1. 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?

      1. 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";

        1. 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

          --
          "Love your nation - respect the others."
  2. 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

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. 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

  3. 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...)

    1. Danke für deine Mühe!
      Jetzt wird es doch schon klarer!

      1. 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

        1. 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

          --
          Husten kann böse Folgen haben.
          Besonders im Kleiderschrank.
          1. 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

            --
            ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
            debian/rules
            1. 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

              --
              Ein guter Lehrer muss seinen Schülern beibringen können,
              eine Frage so zu stellen, dass auch der Lehrer lernen muss,
              um die Frage beantworten zu können.
                (Hesiod, griech. Philosoph, um 700 v.Chr.)
  4. 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

    --
    -------------------
    He is entertaining both out of the car and in the car because if you tell him that a corner is almost flat then he is the guy who is going to try to take it flat even if it means shunting it the other side of it, he will come with the data and say 'hey, I may have crashed and destroyed the car, but I was flat-out'. That is an interesting quality that he has!  --  Team Member on Jacques Villeneuve