» »

Pre in post inkrementacija v c#

Pre in post inkrementacija v c#

slovenc1234 ::

Bi mi lahko kdo na hitro razlozil uporabo inkrementiranja v jeziku c#. V kaksnih primerih se navadno to v praksi uporablja?
Ce je x = 1 potem je x++ enako 1 in ++x enako 2? Kako dalje?

Backup22 ::

//

Isotropic ::

probaj ane

WarpedGone ::

Ce je x = 1 potem je x++ enako 1 in ++x enako 2? Kako dalje?

Ne, pre in post inkrementacija sta dva ukaza v enem:
a = x++; je ekvivalent ukazoma a = x; x = x + 1;
a = ++x; je ekvivalent ukazoma x = x + 1; a = x;

Če inkrementacija stoji sama zase (ni del izraza ali prirejana), pa sta ekvivalentna, i.e.
++Z; in Z++; oboje rezultira v Z = Z + 1;
Zbogom in hvala za vse ribe

smacker ::

Vsak operator je funkcija. Med pre in post increment je razlika samo v return vrednosti. Oba povečata vrednost operanda za ena, ampak vrneta različen rezultat. Če ne shranjuješ rezultata pre/post incrementa je semantično vseeno kaj uporabiš. Performančno je pre-increment hitrejši, ker ne rabi začasne spremenljivke (note: pametni compilerji znajo to sami optimizirat). Če shranjuješ rezultat v spremenljivko, pa uporabiš takega, ki vrača željen rezultat ;)

x++ si lahko predstavljaš tako
int post_increment(ref int x){
    int old = x;
    x = x + 1;
    return old;
}


++x pa tako:
int pre_increment(ref int x){
    x = x + 1;
    return x;
}


x=1; x++ in ++x bo oboje povzročilo da bo x=2.
Če boš imel pa a = x++; ali a = ++x; se bo a razlikoval, medtem ko bo x v obeh primerih 2;

Zgodovina sprememb…

  • spremenil: smacker ()

slovenc1234 ::

Aaaa počasi se mi svita :)) Hvala vam super ste!:D
Pa to vsi jeziki obravnavajo enako?

Zgodovina sprememb…

ales85 ::

Nekateri jeziki tega sploh nimajo. Če pa imajo, ja, logika je ista (oziroma naj bi bila).

avian2 ::

V kaksnih primerih se navadno to v praksi uporablja?

V resni praksi praktično samo kot samostojen "x++;" (ali ekvivalentno "++x;") stavek za inkrementacijo spremenljivke za 1, na primer v kakšnih zankah kot okrajšava za "x = x + 1;" Karkoli drugega je običajno nečitljiva in težko razumljiva koda, ki pogosto vodi do napak. Na primer aritmetični izrazi, kjer je notri nekje vmes skrit "x++", pri meni ne grejo čez code review. To je razlog, zakaj veliko novejših jezikov opušča te opreratorje. Don't be clever.

111111111111 ::

WarpedGone je izjavil:

Ce je x = 1 potem je x++ enako 1 in ++x enako 2? Kako dalje?

Ne, pre in post inkrementacija sta dva ukaza v enem:
a = x++; je ekvivalent ukazoma a = x; x = x + 1;
a = ++x; je ekvivalent ukazoma x = x + 1; a = x;

Če inkrementacija stoji sama zase (ni del izraza ali prirejana), pa sta ekvivalentna, i.e.
++Z; in Z++; oboje rezultira v Z = Z + 1;

Zelo lepa obrazložitev.

+1

GupeM ::

Jaz to uporabljam samo v for zankah. Še v while zanki raje napišem x+=1;

slovenc1234 ::

Hvala vsem za lepe in razumljive razlage :)...lajf je takoj lažji hehe.

slovenc1234 ::

Mi lahko kdo razloži potek izračuna tele enačbe: y += (int)(x++ - (float)y-- / ++a)

WarpedGone ::

y += (int)(x++ - (float)y-- / ++a)

je ekvivalentno:
a = a + 1
y = y + (int)(x - (float)y / a)
x = x + 1
y = y - 1
Zbogom in hvala za vse ribe

slovenc1234 ::

+ podatki: int x = 9, y = 4;
float a = 2.5f;

Yacked2 ::

slovenc1234 je izjavil:

Mi lahko kdo razloži potek izračuna tele enačbe: y += (int)(x++ - (float)y-- / ++a)


Tega in podobnih stvari se v real life izogibaj.
Korak naprej ni vedno ustrezen...sploh če si na robu prepada!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Java] array v voidu

Oddelek: Programiranje
102284 (1983) Spura
»

Programiranje problem android

Oddelek: Programiranje
51173 (938) g333kk
»

integral

Oddelek: Šola
423369 (1806) Elyon8472
»

dvojni integral, pomoc

Oddelek: Loža
71644 (1406) Ktj
»

[C++] Dve malo težji nalogi

Oddelek: Programiranje
162231 (1847) roli

Več podobnih tem