Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: FAQ - C (C89 und C99) ::  x++ und ++x?  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
Krecik
Mitglied

Benutzerprofil
Anmeldungsdatum: 21.09.2001
Beiträge: 45
Beitrag 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
Beitrag 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





Beitrag 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
Beitrag 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
Beitrag 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





Beitrag 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




Beitrag 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
Beitrag 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
Beitrag 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
Beitrag 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 ? ;)
C/C++ Forum :: FAQ - C (C89 und C99) ::  x++ und ++x?  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum nicht antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.