Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Problema blocco del terminale appena digito
Forum - Java - Problema blocco del terminale appena digito "++" al posto di "+1" - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Segnala al moderatore
Postato alle 16:56
Domenica, 01/07/2012
Testo quotato

Postato originariamente da nessuno:

Corretto ... scrivere

a=a++;

è come scrivere

a = a;



Ma... se ho capito bene il post-incremento dovrebbe eseguire prima l'operazione precedente, e poi incrementare la variabile interessata.
Quando allora si scrive
Codice sorgente - presumibilmente Plain Text

  1. x = x++;


dovrebbe prima assegnare
Codice sorgente - presumibilmente Plain Text

  1. x = x


e poi incrementare
Codice sorgente - presumibilmente Plain Text

  1. x = x + 1


La mia domanda: cosa incrementa? Cioè nella prima espressione, la x a destra + "diversa" dalla x a sinistra? Il compilatore che fa esattamente?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6405
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:20
Domenica, 01/07/2012
In effetti, sarà il caldo e la cpu è andata ... :-) ... ma bisogna fare chiarezza ...

In C++ (che penso sia quello a cui molti fanno riferimento), in effetti avviene che

a=a++;
mov         eax,dword ptr [a]  
mov         dword ptr [a],eax  
mov         ecx,dword ptr [a]  
add         ecx,1  
mov         dword ptr [a],ecx  

è equivalente a

a=a; (prime due istruzioni)
a++; (ultime tre istruazioni)


mentre nel caso

a=++a;
mov         eax,dword ptr [a]  
add         eax,1  
mov         dword ptr [a],eax  
mov         ecx,dword ptr [a]  
mov         dword ptr [a],ecx

è equivalente a

a++; (ultime tre istruazioni)
a=a; (prime due istruzioni)


In definitiva, in tutti e due i casi avremo che la variabile aumenta di valore

Ma in C# (e suppongo anche in Java, anche se non ho controllato) avviene che

a=a++;
  IL_0003:  ldloc.0
  IL_0004:  dup
  IL_0005:  ldc.i4.1
  IL_0006:  add
  IL_0007:  stloc.0
  IL_0008:  stloc.0

è semplicemente equivalente a

a=a;

e invece

a=++a;
  IL_0003:  ldloc.0
  IL_0004:  ldc.i4.1
  IL_0005:  add
  IL_0006:  dup
  IL_0007:  stloc.0
  IL_0008:  stloc.0

equivale ad

a++;


Ultima modifica effettuata da nessuno il 01/07/2012 alle 17:33


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 17:47
Domenica, 01/07/2012
Testo quotato

Postato originariamente da nessuno:

In effetti, sarà il caldo e la cpu è andata ... :-) ... ma bisogna fare chiarezza ...

In C++ (che penso sia quello a cui molti fanno riferimento), in effetti avviene che

a=a++;
mov         eax,dword ptr [a]  
mov         dword ptr [a],eax  
mov         ecx,dword ptr [a]  
add         ecx,1  
mov         dword ptr [a],ecx  

è equivalente a

a=a; (prime due istruzioni)
a++; (ultime tre istruazioni)


mentre nel caso

a=++a;
mov         eax,dword ptr [a]  
add         eax,1  
mov         dword ptr [a],eax  
mov         ecx,dword ptr [a]  
mov         dword ptr [a],ecx

è equivalente a

a++; (ultime tre istruazioni)
a=a; (prime due istruzioni)


In definitiva, in tutti e due i casi avremo che la variabile aumenta di valore

Ma in C# (e suppongo anche in Java, anche se non ho controllato) avviene che

a=a++;
  IL_0003:  ldloc.0
  IL_0004:  dup
  IL_0005:  ldc.i4.1
  IL_0006:  add
  IL_0007:  stloc.0
  IL_0008:  stloc.0

è semplicemente equivalente a

a=a;

e invece

a=++a;
  IL_0003:  ldloc.0
  IL_0004:  ldc.i4.1
  IL_0005:  add
  IL_0006:  dup
  IL_0007:  stloc.0
  IL_0008:  stloc.0

equivale ad

a++;




Esattamente... infatti se rileggi il mio post ho specificato, in java, del resto siamo nella sezione java...

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo