| Autor |
Nachricht |
Krecik
Mitglied
Benutzerprofil
Anmeldungsdatum: 21.09.2001
Beiträge: 45
|
Krecik Mitglied
00:41:00 10.10.2001 Titel: |
x++ und ++x? |
Zitieren |
Ich beschäftige mich schon seit Stunden mit der Frage, was der Unterschied zwischen
| C/C++ Code: | blah(blubb-blahblah-1);
blubb--;
blahblah--; | |
| C/C++ Code: | blah(blubb-blahblah-1);
blubb--;
blahblah--; | |
| C/C++ Code: | blah(blubb-blahblah-1);
blubb--;
blahblah--; | |
und
| C/C++ Code: | | blah(--blubb-blahblah--); | |
| C/C++ Code: | | blah(--blubb-blahblah--); | |
| C/C++ Code: | | blah(--blubb-blahblah--); | |
und
| C/C++ Code: | | blah((--blubb)-(blah--)); | |
| C/C++ Code: | | blah((--blubb)-(blah--)); | |
| C/C++ Code: | | blah((--blubb)-(blah--)); | |
ist. Ich kapier das irgendwie nicht. Ich weiß nur, dass mein Programm sich, je nachdem, wie ich das schreibe, unterschiedlich verhält.
Blah,
Krecik
[edit Shade]
'besserer' Titel fuers FAQ
[/edit]
[ 10.10.2001: Beitrag editiert von: Shade Of Mine ] |
|
|
|
 |
Werbeunterbrechung
|
|
 |
mauerranger
Mitglied
Benutzerprofil
Anmeldungsdatum: 04.10.2001
Beiträge: 75
|
mauerranger Mitglied
00:55:00 10.10.2001 Titel: |
|
Zitieren |
also das erste bespiel kann ich dir erklären :
blah--;
da wird blah um -1 inkrementiert
blah--; ist das selbe wie blah=blah-1;
geht auch mit + , c++; ist das selbe wie c=c+1; [img]images/smiles/icon_biggrin.gif[/img]
und falls du das noch nicht gesehn hast c+=10; ist das selbe wie c=c+10; oder c*=10; ist das selbe wie c=c*10;
also die 2 letzten bespiele von dir ahb ich auch noch net gesehn [img]images/smiles/icon_rolleyes.gif[/img] |
_________________ Signatur ? Kann man das essen ?
|
|
 |
Unregistrierter
|
Unregistrierter
02:09:00 10.10.2001 Titel: |
|
Zitieren |
Das letzte gibt 'nen Error!
Gut, ich nehme mal an, es soll blahblah in der Klammer heißen.
Es gibt einfach einen Unterschied zwischen Präin/decrement und
Postin/decrement.
Um's in Zahlen zu zeigen:
blubb=7 blahblah=4
1.) blah(7-4-1); ausgeführt wird blah(2)
blubb--; blubb wird 6
blahblah--; blah wird 3
2.) blah(--blubb-blahblah--);
blah((--7) - (4--));
blubb wird predecrementiert, d.h, das Decrement wird VOR einer
anderen Berechnung ausgeführt.
blahblah wird postdecrementiert, d.h., das Decrement wird NACH
der anderen Berechnung ausgeführt.
ABER: würde Du b global nehmen und nun in blah printen, so ist
es zu diesem Zeitpunkt doch schon eins weniger!
Praktisch sieht es so aus, daß der Inhalt von blahblah für die
nächste Operation gelesen wird, und blahblah dann decrementiert
wird.
Die Folge:
blubb--;
blah(blubb-blahblah);
blahblah--;
bringt also nur gleiche Resultate, wenn blah nicht direkt auf
blahblah zugreift.
Effektiv wird gerufen:
blah(6-4);
danach sind blubb 6 und blah 3.
3.) identisch zu 2.
Nochmal zur Situation in blah()
1.) blubb=7 blahblah=4
2.+3.) blubb=6 blahblah=4
Nach Ausführung der Befehle gilt in allen Fällen:
blubb=6 blahblah=3
Blubb! |
|
|
|
 |
Bashar
Mitglied
Benutzerprofil
Anmeldungsdatum: 15.05.2001
Beiträge: 16828
|
Bashar Mitglied
03:38:00 10.10.2001 Titel: |
|
Zitieren |
Mal was zum Nachdenken:
sind die beiden Ausdrücke
--x und (x-- - 1)
(oder auch x-- und (--x + 1))
semantisch äquivalent? |
_________________ OSL♥
|
|
 |
volkard
Moderator
Benutzerprofil
Anmeldungsdatum: 06.04.2000
Beiträge: 24356
|
volkard Moderator
07:16:00 10.10.2001 Titel: |
|
Zitieren |
| Zitat: | Original erstellt von Bashar:
Mal was zum Nachdenken:
sind die beiden Ausdrücke
--x und (x-- - 1)
(oder auch x-- und (--x + 1))
semantisch äquivalent? |
Ich teste mal, ob --x=x---x mit der anderen Version das gleiche Ergebnis bringt. Wenn ich mal die Compilerfehler wegkriege. |
_________________ http://www.venganza.info/
plonk fürs Forum v1.02
|
|
 |
Unregistrierter
|
Unregistrierter
10:24:00 10.10.2001 Titel: |
|
Zitieren |
@Bashar:
Solange nichts überladen ist, würde ich in rvalue-Situationen spontan mal ja behaupten. Bei --x wird x decrementiert und dann in den
Akku geholt. Bei x-- wird x in den Akku geholt und dann direkt decrementiert. Nun folgt wg. - 1 noch die Decrementierung des Akkus.
Möglicherweise optimiert der Compiler diese erkennbare Situation.
Ein Timerinterrupt der x verwendet könnte ruhig reinhauen, weil er mit dem Akku nichts am Hut hat. An den Limits machts auch nichts aus (selbst wenn x unsigned ist). |
|
|
|
 |
volkard
Unregistrierter
|
volkard Unregistrierter
11:01:00 10.10.2001 Titel: |
|
Zitieren |
jo, glaub ich auch. und mein Compilerfehler hat irgendwas mit lvalues zu tun. |
|
|
|
 |
Kauz01
Mitglied
Benutzerprofil
Anmeldungsdatum: 11.09.2001
Beiträge: 794
|
Kauz01 Mitglied
11:56:00 10.10.2001 Titel: |
|
Zitieren |
Ich würde micht versuhcen demn Ausdruck --x einen WErt zuzuweisen [img]images/smiles/icon_biggrin.gif[/img] |
_________________ Viele Leute glauben zu denken, dabei ordnen sie lediglich ihre Vorurteile neu.
(Williams James)
|
|
 |
Shade Of Mine
Moderator
Benutzerprofil
Anmeldungsdatum: 04.05.2001
Beiträge: 17739
|
Shade Of Mine Moderator
13:36:00 10.10.2001 Titel: |
|
Zitieren |
--x == x-- -1;
ich wuerde sagen nein [img]images/smiles/icon_wink.gif[/img]
denn das ist ja die kurzschreibweise fuer
x=x-1;
x==x-1;
x=x-1;
und x ist definitive ungleich x-1
allerdings wuerde ich sagen dass sie semantisch aequvalent sind [img]images/smiles/icon_smile.gif[/img]
beispiel:
--x==y;
lange form:
x=x-1;
x==y
x-- -1==y;
lange form:
x-1==y
x=x-1;
bei beiden variante wird das um 1 verringerte x mit y verglichen und danach hat x den wert von x-1...
also semantisch gleich... |
_________________ A language that doesn't affect the way you think about programming is not worth knowing.
|
|
 |
mauerranger
Mitglied
Benutzerprofil
Anmeldungsdatum: 04.10.2001
Beiträge: 75
|
mauerranger Mitglied
14:58:00 10.10.2001 Titel: |
|
Zitieren |
hier noch mal was von mir [img]images/smiles/icon_wink.gif[/img]
also wenn da steht :
a=b++;
dann wird a zuerst der wert von b zu gewiesen und b wird dann um eins inkremitiert
schreibt man aber
a=++b;
wird b zuerst um 1 inkrementiert und dann wird a der wert von b zu gewiesen [img]images/smiles/icon_smile.gif[/img]
doppelt gemoppelt gehts aber net [img]images/smiles/icon_wink.gif[/img]
also a=++b++; geht net !!
also ich denk jetzt dürften auch die 2 letzen beispiele mit ein wenig logischen denken gemeistert werden [img]images/smiles/icon_wink.gif[/img] |
_________________ Signatur ? Kann man das essen ?
|
|
 |