i++

algemene C code
Berichten: 76
Geregistreerd: 05 Nov 2016, 09:42

i++

Berichtdoor spaansebrabander » 13 Jan 2017, 14:04

Ik ben dus nog niet zo lang bezig met Arduino dus.
Ik dacht dat i++ hetzelfde betekent als i=i+1

Nu lees ik:
x++; // increment x by one and returns the old value of x
++x; // increment x by one and returns the new value of x

Ik begrijp niet wat men nu bedoelt met "returns to the old value of x".

In een for statement blijkt dat het niet uitmaakt of je ++i of i++ schrijft.
Hoe zit het nu echt?

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: i++

Berichtdoor nicoverduin » 13 Jan 2017, 18:37

voorbeeld:
cpp code
uint8_t x = 0;
uint8_t y = x++; // y = 0 en x wordt teruggegeven aan z en daarna met een opgehoogd.
uint8_t z = ++x; // z = 2 x wordt eerst met een opgehoogd en dan pas teruggegeven aan z;

Je zou er goed aan doen om eens de c bijbel te downloaden "The C programming language" van Kerningham & Richie
Daar wordt de basis C taal geschreven zoals deze was gedefinieerd ergens in de 70'er jaren (inderdaad iets van 40 jaar geleden......)
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: i++

Berichtdoor shooter » 13 Jan 2017, 20:15

++x doet eerst 1 optellen en dan is de uitkomst dus gelijk aan de x, ofwel de return is de nieuwe waarde
x++ doet eerst de uitkomst doorgeven en dan pas 1 optellen. ofwel de return is de oude waarde

in een for wordt de return niet gebruikt, er staat toch geen japie= voor.
ik heb even opgezocht waar je dit gevonden hebt,
dus ik gebruik hun voorbeeld
als x=10

dan is y= x++ dan is y dus 10, onthouden kun je dit door te kijken naar de volgorde: y=x en dan pas 1 optellen bij x dus die wordt 11
en y=++x eerst optellen dus x=11 en dan pas doorgeven dus y wordt ook 11
paul deelen
shooter@home.nl

Berichten: 76
Geregistreerd: 05 Nov 2016, 09:42

Re: i++

Berichtdoor spaansebrabander » 14 Jan 2017, 01:37

Ik kan de logica niet volgen. Volgens mij is x++ hetzelfde als x=x+1. Dan wordt de nieuwe x toch gelijk aan de oude x verhoogd met 1. Wat betekent dan dat je de oude waarde terug krijgt? Ik begrijp het verschil tussen x++ en ++x niet.

Berichten: 76
Geregistreerd: 05 Nov 2016, 09:42

Re: i++

Berichtdoor spaansebrabander » 14 Jan 2017, 02:18

Ik heb wat geexperimenteerd en vind

als i=1, dan
i++ = 1 daarna
i = 2
i++ = 2 daarna
i = 3

Dus blijkbaar is i++ gelijk aan i, maar in het volgende statement is i wel met 1 verhoogd.
Daar zit toch iets veemds, ongrijpbaars. Dit heeft voor een simpele programmeur geen invloed denk ik. kun je in de praktijk in een for statement i++ en ++i gebruiken? Maar verder is het misschien verstandiger om i = i+1 te gebruiken?

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: i++

Berichtdoor nicoverduin » 14 Jan 2017, 09:20

In feite zijn het 2 statements die gemakshalve zijn gecombineerd. Dus als je geen gelijkstelling gebruikt (dus een andere variabele bijv. y = x++) maar gewoon x++; Worden ze achter elkaar uitgevoerd en dus opgehoogd met 1.
++x en x++ kunnen vooral handig zijn als je met arrays werkt en pointers in complexe zoekoperaties.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: i++

Berichtdoor Koepel » 14 Jan 2017, 10:07

@spaansebrabander, jij mag gewoon i = i + 1 doen ;) Iedereen begrijpt dat, dus is het goede code 8-)

De eerste twee reacties van nicoverduin en shooter geven exact aan waar het voor is. Het gaat er om of het resultaat meteen in een statement gebruikt wordt. De 'return waarde' is misschien hier een verwarrende term.

Ik kan het op een iets andere manier uitleggen:
i++ betekend: "gebruik" i en verhoog daarna i.
++i betekend: verhoog i en "gebruik" het daarna.
In beide gevallen wordt i verhoogd, dus het doet hetzelfde. Als i niet in hetzelfde statement gebruikt wordt, dan is het hetzelfde.

Maar i kan in hetzelfde statement meteen gebruikt worden, en dan ontstaat er een verschil.
y = i++; // y wordt i, pas daarna wordt i verhoogd.
y = ++i; // eerst wordt i verhoogd, pas daarna wordt dat in y gestopt.

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: i++

Berichtdoor shooter » 14 Jan 2017, 11:34

ja brabo je hebt volkomen gelijk, lekker +1 gebruiken, dat leest ook beter.
paul deelen
shooter@home.nl

Berichten: 76
Geregistreerd: 05 Nov 2016, 09:42

Re: i++

Berichtdoor spaansebrabander » 14 Jan 2017, 15:12

Het is me nu wel duidelijk. Ik weet nog niet wa precies bij welke toepassing wordt gebruikt, maar dat komt(misschien) nog wel. Het verschil tussen ++i en i++ stond in een "cursus" van Teaking4all, waarin iemand dit uitlegt aan twee jongens van 10 en 13 jaar.......

Gebruikers-avatar
Berichten: 118
Geregistreerd: 01 Okt 2015, 11:54
Woonplaats: Castricum

Re: i++

Berichtdoor FonzieBonzo » 17 Jan 2017, 16:16

Ik kom van de taal Delphi / Pascal waar ze ++i i++ ook niet kennen.
De uitleg van Koepel ook was voor mij dan ook erg verhelderend!

Vooral de for..next loops vind ik lastig te lezen in C++
in tegenstelling tot for i:=1 to 10 step 2 do........


Gr,
Fonzie

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 10 gasten