Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460

    problema di precedenza sugli operatori

    non mi tornano i conti sulle 2 operazioni contrassegnate dai 2 backslash

    codice:
    public class secondo{
            public static void main ( String args[]){
            int varU=2;
            int varV=3;
            int varW=5;
            int varX=7;
            int varY=11;
            System.out.println(varU+varV*varW+varX);
            System.out.println(varU+varY%varV*varW+varX);
            System.out.println(varU++/varV+varU++*varW);//
            System.out.println(varU++/varV);
            System.out.println(varU++*varW);//
            }
    }
    secondo ciò che ho scritto sul libro e quello che ho trovato in giro per la rete i risultati dovrebbero essere rispettivamente 16 e 15, invece java mi riporta 15 e 25.

    l'operatore di incremento unario postfisso ha precedenza sulla moltiplicazione e la divisione, queste ultime hanno a loro volta precedenza più alta rispetta alla somma algebrica, questo dovrebbe essere quanto in vigore, invece mi ritrovo con risultati che non so come vengano calcolati.

  2. #2

    Re: problema di precedenza sugli operatori

    Originariamente inviato da Freax
    codice:
            System.out.println(varU++/varV+varU++*varW);//
    La divisione risulta:
    codice:
    varU++ / varV = 2 / 3 = 0
    in quanto l'operatore di incremento postfisso esegue prima la valutazione del valore e successivamente esegue l'incremento.
    Quindi, nella divisione varU viene valutato 2 e successivamente viene incrementato.
    Infatti
    codice:
    varU++
    vale 3.

    Per ottenere 16 devi sostituire il primo operatore di incremento postfisso con l'operatore di incremeno prefisso, il quale effettua prima l'incremento.

  3. #3
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460

    Re: Re: problema di precedenza sugli operatori

    Originariamente inviato da VincenzoTheBest
    La divisione risulta:
    codice:
    varU++ / varV = 2 / 3 = 0
    in quanto l'operatore di incremento postfisso esegue prima la valutazione del valore e successivamente esegue l'incremento.
    Quindi, nella divisione varU viene valutato 2 e successivamente viene incrementato.
    Infatti
    codice:
    varU++
    vale 3.

    Per ottenere 16 devi sostituire il primo operatore di incremento postfisso con l'operatore di incremeno prefisso, il quale effettua prima l'incremento.
    e alla luce di ciò, che senso ha dire che l'operatore di incremento unitario postfisso ha priorità più alta rispetto alla divisione?

    se online e sul libro mi scrivono questo io capisco che prima si fa una cosa e poi si fa l'altra ...

    in ogni caso anche ragionando per questa strada non mi trovo con il risultato, ad esempio l'ultima operazione, come fa ad uscire 25 da li? e anche per l'altra non mi tornano i conti neanche così.

    io prendo
    codice:
    varU++/varV+varU++*varW
    ragiono per priorità, quindi individuo l'operatore a priorità più bassa e via via quelli a priorità più alta, giusto? ci siamo?
    in questa operazione ho una scala di priorità che dal più basso al più alto in grado va così:

    operatore di somma +
    operatore di divisione /
    operatore di moltiplicazione *
    operatore di incremento unitario postfisso ++

    non mi tornano i conti e non capisco cosa significhi fare prima una operazione a più bassa priorità ( divisione ) rispetto ad una a più alta priorità ( incremento )

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    no è proprio la modalità con cui li scrivi

    valore++

    PRIMA usa valore nel contesto in cui lo hai inserito e POI lo incrementa.

  5. #5
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460
    Originariamente inviato da valia
    no è proprio la modalità con cui li scrivi

    valore++

    PRIMA usa valore nel contesto in cui lo hai inserito e POI lo incrementa.
    ok, ma se io ho

    2++ diviso 3

    e lui mi calcola 0, matematicamente corretto secondo quanto dici cioé tralasciando il ++, di quel 2 incrementato che me ne faccio visto che la divisione è già eseguita? per giunta la divisione è a priorità più bassa, quindi non capisco perché fare la divisione prima dell'incremento

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    e ribadisco, leggi bene la frase, prima viene usato il valore nel contesto eseguito e poi aumentato, anche se nel contesto ti trovi una operazione a priorità più bassa.

    infine, se vuoi essere sicuro metti delle parentesi o separa le operazioni
    codice:
    valore = 2; 
    valore++;
    valore / 3;
    oppure usa


    codice:
    valore = 2;
    ++valore / 3;
    anche se delle parentesi e separazioni per valutare correttamente le priorità io le inserirei

  7. #7
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460
    Originariamente inviato da valia
    e ribadisco, leggi bene la frase, prima viene usato il valore nel contesto eseguito e poi aumentato, anche se nel contesto ti trovi una operazione a priorità più bassa.

    infine, se vuoi essere sicuro metti delle parentesi o separa le operazioni
    codice:
    valore = 2; 
    valore++;
    valore / 3;
    oppure usa


    codice:
    valore = 2;
    ++valore / 3;
    anche se delle parentesi e separazioni per valutare correttamente le priorità io le inserirei
    questo esercizio è parte di alcuni test da fare in un libro, lo vorrei lasciare così, inoltre con le parentesi perdo il calcolo sulle priorità degli operatori e salta buona parte della difficoltà.

    ho capito ciò che dici, ma posso fare una divisione 2 volte?

    2++/3 fa 0, ++ che incrementa? il risultato dell'operazione?

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    no incrementa il valore a cui è riferito, infatti se stampi subito dopo il valore dovresti avare 3

  9. #9
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460
    Originariamente inviato da valia
    no incrementa il valore a cui è riferito, infatti se stampi subito dopo il valore dovresti avare 3
    non sto facendo una assegnazione ad una variabile che mi conserva il risultato, sto facendo una serie di operazioni

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    tu prova, prima e dopo

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 © 2024 vBulletin Solutions, Inc. All rights reserved.