Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465

    Priorità degli operatori

    Sul testo che sto leggendo c'è scritto che se :

    y=8;
    x=y--;

    x=8;
    y=7;

    mentre se scrivo:

    y=8;
    x=--y;

    x=7;
    y=7;

    e va bene però qualche pagina dopo trovo questa tabella:

    http://homes.di.unimi.it/~alberti/Pr...recedenze.html
    "Gli operatori binari sono valutati da sinistra a destra, mentre gli assegnamenti sono valutati da destra a sinistra."

    e mi sorge il dubbio:

    Ma se durante l'assegnamento devo leggere da destra a sinistra quando scrivo:
    x=y--;
    prima decremento y e trovo y=7 e poi (con y impostato su 7) ottengo x=7 e non x=8.


  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    La differenza è data dall'operatore di incremento. Nel primo caso si tratta di un post incremento nel secondo di un pre incremento.

    codice:
    class Prova {
      public static void main(String[] args) {
        int x = 10;
        System.out.println("x: "+x);
        System.out.println("x++: "+(x++));
        // Riporto al caso iniziale
        x = 10;
        System.out.println("++x: "+(++x));
      }
    }
    output
    codice:
    x: 10
    x++: 10
    ++x: 11
    In poche parole, visto dal punto di vista teorico è così:

    x = 10;
    "stampa x"
    "incrementa x"

    x = 10;
    "incrementa x"
    "stampa x"

    Allo stesso modo vale l'assegnamento; nel tuo primo caso, prima avviene l'assegnamento ad y, e poi il decremento. Nel secondo è l'opposto, prima il decremento e poi l'assegnamento.

  3. #3
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    in pratica l'interesse di fare un pre o un post incremento e definito dall'operatore ++(postfisso) o ++(prefisso) che per ordine ha precedenza rispetto all'=, giusto? ho capito la logica?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da peruzzo
    in pratica l'interesse di fare un pre o un post incremento e definito dall'operatore ++(postfisso) o ++(prefisso) che per ordine ha precedenza rispetto all'=, giusto? ho capito la logica?
    No, non c'entra la "precedenza". Centra l'ordine in cui vengono fatte le valutazioni.

    Gli operatori in forma prefissa (++variabile) vengono valutati prima di valutare l'espressione complessiva, mentre gli operatori in forma suffissa (variabile++) vengono valutati dopo aver valutato l'espressione. Un esempio, per capire che non c'entra l'operatore di assegnamento:

    codice:
    int valore = 10;
    System.out.print("Forma prefissa: ");
    System.out.println(  ++valore );
    System.out.print("Forma suffissa: ");
    System.out.println( valore++ );
    System.out.println("Dopo le due valutazioni: " + valore);
    Questo brano di codice stampa il seguente output:
    codice:
    Forma prefissa: 11
    Forma suffissa: 11
    Dopo le due valutazioni: 12
    Alla riga 3 viene prima valutato l'operatore ( ++valore ), poi l'espressione (System.out.println(<espressione>) ).
    Alla riga 5 viene prima valutata l'espressione (System.out.println(<espressione> ) ), poi viene valutato l'operatore ( valore++ ).

    Per questo, le seguenti istruzioni
    codice:
    int a = 10;
    int b = 10;
    System.out.println(++a * b++);
    System.out.println("A=" + a + ", B=" + b);
    Producono il seguente output:
    codice:
    110
    A=11, B=11

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    Ho capito tutto, grazie.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.