Hvad er forskellen mellem ++ a og a ++ i et programmeringssprog?


Svar 1:

I programmeringssprog kaldes disse to som pre (++ a) og post (a ++) stigningsangivelser.

Lad mig give dig et eksempel,

a = 0, b = 0;

for (i = 0; i <= 5; i ++) {// loop i 5 gange

printf ("% d", ++ a); // dette udskrives “1 2 3 4 5”

printf ("% d", b ++); // og dette vil være “0 1 2 3 4”

}

I ++ a øges en værdi først og tildeles derefter

++ a -> stigning -> tilordne

Mens b ++ tildeles først b-værdien, og derefter øges den

a ++ -> tildel - - forøgelse


Svar 2:

Tidligere var kompilatorer ikke så smarte og ved at bruge ++ & - kunne det hjælpe en compiler med at generere bedre maskinkode.

++ et trin og giver dig værdien, og en ++ giver dig værdien derefter trin. Af dem selv er der ingen forskel, men de er i et udtryk for, at de er forskellige.

Auto forøgelse og nedgang er meget almindeligt i mange CPU instruktionssæt, da det er meget effektivt og let at implementere.

En stak er en almindelig datastruktur, men der er 2 valg:

int-stak [100]; // min stak af numre gemmes her * top = & stack [0]; // toppen af ​​stablen justeres, hver gang den bruges

// Metode 1: top er hvor noget nyt vil blive skubbet * top ++ = noget; // PUSH noget, så trinvis øges = * —top; // dekrement og POP derefter den øverste værdi

// Metode 2: top er hvor noget gammelt bliver POPPED * ++ top = noget; // stigning derefter SKUS noget = * top—; // POP derefter dekrement

Nogle CPU-compilere kan konvertere nogle af disse til effektive enkeltinstruktioner.

Et andet eksempel er:

hvis (—a> 0) goto label;

kunne konverteres til en enkelt CPU-instruktion som

djnz reg1, adresse; decrement register, hoppe hvis ikke nul til adresse

Men en CPU har muligvis ikke en indbygget instruktion til:

hvis (a—> 0) goto label;

som måske konverteres til noget lignende

flyt reg1, reg2decrement reg1test reg2jnz adresse

Moderne compilere vil ofte praktisk talt "omskrive" din kode for at drage fordel af specielle CPU-instruktioner, så medmindre du programmerer på en lille begrænset mikrocontroller, behøver du normalt ikke at bekymre dig.


Svar 3:

Tidligere var kompilatorer ikke så smarte og ved at bruge ++ & - kunne det hjælpe en compiler med at generere bedre maskinkode.

++ et trin og giver dig værdien, og en ++ giver dig værdien derefter trin. Af dem selv er der ingen forskel, men de er i et udtryk for, at de er forskellige.

Auto forøgelse og nedgang er meget almindeligt i mange CPU instruktionssæt, da det er meget effektivt og let at implementere.

En stak er en almindelig datastruktur, men der er 2 valg:

int-stak [100]; // min stak af numre gemmes her * top = & stack [0]; // toppen af ​​stablen justeres, hver gang den bruges

// Metode 1: top er hvor noget nyt vil blive skubbet * top ++ = noget; // PUSH noget, så trinvis øges = * —top; // dekrement og POP derefter den øverste værdi

// Metode 2: top er hvor noget gammelt bliver POPPED * ++ top = noget; // stigning derefter SKUS noget = * top—; // POP derefter dekrement

Nogle CPU-compilere kan konvertere nogle af disse til effektive enkeltinstruktioner.

Et andet eksempel er:

hvis (—a> 0) goto label;

kunne konverteres til en enkelt CPU-instruktion som

djnz reg1, adresse; decrement register, hoppe hvis ikke nul til adresse

Men en CPU har muligvis ikke en indbygget instruktion til:

hvis (a—> 0) goto label;

som måske konverteres til noget lignende

flyt reg1, reg2decrement reg1test reg2jnz adresse

Moderne compilere vil ofte praktisk talt "omskrive" din kode for at drage fordel af specielle CPU-instruktioner, så medmindre du programmerer på en lille begrænset mikrocontroller, behøver du normalt ikke at bekymre dig.