frage der ordnung
bleicher
- programmiertechnik
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
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.
> ~~~javascript
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
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
~~~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.
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
~~~perl
$i = 5;
$i = $i++ + $i++;
print $i;
^Z
11
javascript:var i=5;i=++i + ++i;alert(i);
11
Adiou.
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.
Grundlage für Zitat #1851.
[latex]Mae govannen![/latex]
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](https://forum.selfhtml.org/?t=197497&m=1324775))
[SelfHTML-Forum-Stylesheet](http://selfhtml.knrs.de/#h_stylesheet)
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.
[latex]Mae govannen![/latex]
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
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.
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
Moin,
var i=5;
i=++i + ++i;
>
> was ergibt i in unterschiedlichen situtationen?
~~~java
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
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](http://www.perlmonks.org/?node_id=369247):
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](https://forum.selfhtml.org/?t=202926&m=1371289) Code ergeben hat
Struppi.
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](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf), 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
public Form1()
{
int i = 5;
i = ++i + ++i;
MessageBox.Show(i.ToString());
}
Moin!
--
»»for your security, this text has been encrypted by ROT13 twice.
YMMD
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:
~~~perl
use strict;
my $i = 5;
$i = ++$i + ++$i;
print $i;
wobei ich vermute, dass der Ausdruck von Perl wir folgt interpretiert wird:
Hotti