bleicher: frage der ordnung

Grüße,
so aus neugier -

var i=5; i=++i + ++i;

was ergibt i in unterschiedlichen situtationen? von der Idee her 14, aber unter Opera11 in JS kriegt man 13.
was kriegt man unter anderen browsern, programmiersprachen etc.?
MFG
bleicher

FirefoxMyth

-- __________________________-
  1. Hallo,

    so aus neugier -

    var i=5; i=++i + ++i;

    was ergibt i in unterschiedlichen situtationen?

    was meinst du für unterschiedliche Situationen? Der Code ist eindeutig, es gibt nur eine richtige Interpretation.

    var i=5; i=++i + ++i;

    "Lege eine Variable i an und gib ihr den Wert 5."
    "Erhöhe den aktuellen Wert von i (ergibt 6), lies ihn dann aus und merke ihn als ersten Summanden vor. Erhöhe nochmal den Wert von i (ergibt 7), lies ihn erneut aus und und nimm ihn als zweiten Summanden. Addiere die beiden und speichere das Ergebnis (13) in i."

    von der Idee her 14, aber unter Opera11 in JS kriegt man 13.

    Ja, 13 ist richtig, wie kommst du auf 14?

    Ciao,
     Martin

    --
    Fische, die bellen, beißen nicht.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(

  2. Bounjoun bleicher,

    Grüße,
    so aus neugier -

    var i=5; i=++i + ++i;

    was ergibt i in unterschiedlichen situtationen? von der Idee her 14, aber unter Opera11 in JS kriegt man 13.

    C:>perl

    $i = 5; $i = ++$i + ++$i; print $i; ^Z 14

    javascript:var i=5;i=++i + ++i;alert(i);

    Obiges zum Kopieren und Einfügen in die Adresszeile (samt Return) ergibt 13 in Safari, 13 in Firefox, 13 im IE 8.

    Tja, Javascript ist TOLL!

    Adiou.

    -- Ich bin eigentlich ganz anders, aber ich komme so selten dazu. - Ödön von Horwáth
    Ist Rudi Carrell Gott? Oder George Harrison Ford?
    1. Bounjoun Jean-Max,

      C:>perl

      $i = 5; $i = ++$i + ++$i; print $i; ^Z 14

      javascript:var i=5;i=++i + ++i;alert(i);

      C:\Users\Patrick Andrieu>perl

      $i = 5; $i = $i++ + $i++; print $i; ^Z 11

      javascript:var i=5;i=++i + ++i;alert(i);

      11

      Adiou.

      -- Ich bin eigentlich ganz anders, aber ich komme so selten dazu. - Ödön von Horwáth
      Ist Rudi Carrell Gott? Oder George Harrison Ford?
      1. Aargh!

        javascript:var i=5;i=++i + ++i;alert(i);

        11

        javascript:var i=5;i=i++ + i++;alert(i);

        11

        Ich sollte kopieren, was ich ausprobiere, und nicht probieren, ob ich richtig kopiere...

        Adiou.

        -- Ich bin eigentlich ganz anders, aber ich komme so selten dazu. - Ödön von Horwáth
        Ist Rudi Carrell Gott? Oder George Harrison Ford?
    2. Mae  govannen!

      C:>perl

      $i = 5; $i = ++$i + ++$i; print $i; ^Z 14

      Huch! Was rechnet Perl denn da?

      1) i ist 5
      2) Linker Term: ++i (also 5 + 1) => i ist jetzt 6
      3) Rechter Term ++i (also 6 + 1)
      4) Addition: 6 + 7 => 13

      javascript:var i=5;i=++i + ++i;alert(i);

      Obiges zum Kopieren und Einfügen in die Adresszeile (samt Return) ergibt 13 in Safari, 13 in Firefox, 13 im IE 8.

      Genau das erwarte ich.

      Tja, Javascript ist TOLL!

      Jo, JS kann im Gegensatz zu perl sogar rechnen ^^

      Cü,

      Kai

      -- ~~~ KEN SENT ME ~~~
      Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
      in Richtung "Mess up the Web".(suit)
      SelfHTML-Forum-Stylesheet
      1. Bounjoun Kai345,

        [Perl] 14
        Huch! Was rechnet Perl denn da?
        [JS] 13
        Jo, JS kann im Gegensatz zu perl sogar rechnen ^^

        Vielleicht kann uns Struppi, der JavaScript mindestens genauso toll wie Perl findet, Auskunft geben ;)

        Derweil bleibe ich bei der verflixten 7, die der Martin so schön erklärt hat...

        Achja... vielleicht ist uns bleicher die Erklärung schuldig, wie er »von der Idee her« aufs perlige 14 kam?

        Adiou.

        -- Ich bin eigentlich ganz anders, aber ich komme so selten dazu. - Ödön von Horwáth
        Ist Rudi Carrell Gott? Oder George Harrison Ford?
      2. Mae  govannen!

        C:>perl

        ~~~ perl $i = 5;
        $i = ++$i + ++$i;
        print $i;
        ^Z
        14

        ~~~

        Huch! Was rechnet Perl denn da?

        1) i ist 5
        2) Linker Term: ++i (also 5 + 1) => i ist jetzt 6
        3) Rechter Term ++i (also 6 + 1)
        4) Addition: 6 + 7 => 13

        Offensichtlich führt Perl erst die Inkrement Operation durch, bevor es addiert, was nach der Operator Reihenfolge logisch ist.

        Aber hier eine etwas ausführlichere Diskussion
        http://www.perlmonks.org/?node_id=369247

        javascript:var i=5;i=++i + ++i;alert(i);

        Obiges zum Kopieren und Einfügen in die Adresszeile (samt Return) ergibt 13 in Safari, 13 in Firefox, 13 im IE 8.

        Genau das erwarte ich.

        es gibt offensichtlich kein erwarten in dieser Situation, zumindest entnehme ich das der obigen Diskussion.

        Tja, Javascript ist TOLL!

        Jo, JS kann im Gegensatz zu perl sogar rechnen ^^

        Naja, um's rechnen geht's hier weniger, sondern wann welcher Operator ausgeführt wird.

        Struppi.

    3. Obiges zum Kopieren und Einfügen in die Adresszeile (samt Return) ergibt 13 in Safari, 13 in Firefox, 13 im IE 8.
      Tja, Javascript ist TOLL!

      Die Regel, dass in JS nichts kompatibel ist, wurde durch diese Ausnahme hervorragend bestätigt.

      mfg Beat --

      <o(((°>           ><o(((°>

         <°)))o><                     ><o(((°>o
      Der Valigator leibt diese Fische

  3. Moin,

    var i=5; i=++i + ++i;

    was ergibt i in unterschiedlichen situtationen?

    public class add {    public static void main (String args[]) {       int i = 5;       i = ++i + ++i;       System.out.println("> " + i);   } }

    $ java add

    13

    #include <stdio.h> int main(void) {         int i = 5;         i = ++i + ++i;         printf("> %i\n", i); }

    $ ./add

    14

    Viele Grüße,
    Robert

  4. var i=5; i=++i + ++i;

    was ergibt i in unterschiedlichen situtationen? von der Idee her 14, aber unter Opera11 in JS kriegt man 13.
    was kriegt man unter anderen browsern, programmiersprachen etc.?

    Aus der Diskussion:
    Modifying the same variable using auto-increment/decrement more than once in the same statement gives undefined behaviour.

    und:
    The first sentence in perlop.pod regarding auto-increment and auto-decrement reads:

        "++" and "--" work as in C.

    was auch Robert Code ergeben hat

    Struppi.

  5. Hallo,

    so aus neugier -

    var i=5; i=++i + ++i;

    was ergibt i in unterschiedlichen situtationen? von der Idee her 14,

    wie kommst Du darauf?

    aber unter Opera11 in JS kriegt man 13.

    in Javascript erwarte ich 13, zumindest lese ich das so aus Spezifikation von ECMAScript, siehe Martins Argumentation:

    Wir haben eine einfach Zuweisung an eine Variable, somit wird das Ergebnis des Ausdrucks auf der rechten Seite zugewiesen. (11.13.1)

    Schauen wir uns die rechte Seite an:
    Wir haben eine Addition (11.6.1)
    (1) Zuerst wird der Ausdruck des ersten Summanden bewertet,
    (2) dann wird der Ausdruck des zweiten Summanden bewertet
    (3) Da es sich um zwei Zahlen handelt, ergibt sich die Summe gemäß 11.6.3

    (1) ist ein unärer Ausdruck (11.4) und wird gemäß 11.4.4 ausgewertet:
    dabei wird in Teilschritt 6 der um 1 erhöhte Wert (oldValue ist 5) in die Variable zurückgeschrieben, d.h. der erste Summand wird zu 6 ausgewertet.

    (2) ist ebenfalls ein unärer Ausdruck, oldValue ist 6, da (1) bereits ausgewertet wurde => der zweite Summand wird zu 7 ausgewertet.

    (3) Die Summe von 6 und 7 ist 13.

    => von einer Javascript-Engine erwarte ich daher, dass 13 herauskommt.

    was kriegt man unter anderen browsern,

    Ich erwarte und erhalte in allen von mir getesteten Browsern (Chrome, Firefox, IE, Opera, Safari) 13.

    programmiersprachen etc.?

    In C: Undefiniertes Verhalten, siehe http://c-faq.com/expr/seqpoints.html.

    Freundliche Grüße

    Vinzenz

  6.         public Form1()         {             int i = 5;             i = ++i + ++i;             MessageBox.Show(i.ToString());         } -- for your security, this text has been encrypted by ROT13 twice.
    1. Moin!

      --

      »»for your security, this text has been encrypted by ROT13 twice.

      YMMD

      --
      Vergesst Chuck Norris.
      Sponge Bob kann unter Wasser grillen!

  7. hi,

    var i=5; i=++i + ++i;

    was ergibt i in unterschiedlichen situtationen? von der Idee her 14, aber unter Opera11 in JS kriegt man 13.

    Hmm, in Perl krieg ich die 14:

    use strict; my $i = 5; $i = ++$i + ++$i; print $i;

    wobei ich vermute, dass der Ausdruck von Perl wir folgt interpretiert wird:
    - inkrementiere vor der Addition $i, wir bekommen 6 + 6
    - führe die Addition aus, wobei die Summanden vorher inkrementiert werden, so haben wir dann 7 + 7 und erhalten schließlich die 14.

    Hotti