Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: info su somma in java

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    205

    info su somma in java

    Ciao a tutti

    qualcuno mi può spiegare come funzionano queste somme in java:

    1) a=4 b=8

    a= a++ + --b

    2)
    a= ++a + b--

    GRAZIE

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,307
    Nella prima la sequenza di istruzioni è la seguente:

    1) viene decrementato 'b' di uno (ora 'b' vale 7)
    2) viene sommato 'a' a 'b' (somma = 11)
    3) viene incrementato a di uno (ora 'a' vale 5)
    4) ad 'a' viene assegnato il valore dell'espressione somma (ora 'a' vale 11).


    Nella seconda sequenza, invece, accade questo:

    1) 'a' viene incrementato di uno (ora 'a' vale 5)
    2) ad 'a' viene aggiunto 'b' (somma = 13)
    3) viene decrementato 'b' di uno (ora 'b' vale 7)
    4) ad 'a' viene assegnato il valore dell'espressione somma (ora 'a' vale 13)


    Tutto si gioca sulla precedenza degli operatori e sul loro significato nella forma prefissa e suffissa: nella forma prefissa (++a) prmia viene incrementata la variabile e solo successivamente la variabile entra in gioco nell'espressione; nella forma suffissa (a++), invece, prima la variabile entra in gioco nell'espressione e solo successivamente viene incrementata. Lo stesso dicasi per l'operatore di decremento.


    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

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    205

    grazie!

    Ok ora è chiaro..
    dalle soluzione che ho io cmq
    a=a++ + --b risulta 12 ....

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    205

    grazie!

    Ok ora è chiaro..
    dalle soluzione che ho io cmq
    a=a++ + --b risulta 12 ....

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,307
    Le soluzioni sono sbagliate! Prova: fa 11!

    Se lo stesso codice lo compili in C/C++, invece, il risultato diventa effettivamente 12 (facendo in modo, quindi, che la valutazione di a++ venga effettuata prima dell'espressione in cui è contenuta).


    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

  6. #6

    Re: grazie!

    Originariamente inviato da elly00
    Ok ora è chiaro..
    dalle soluzione che ho io cmq
    a=a++ + --b risulta 12 ....

    è sbagliata la soluzione che hai, ha ragione Lele

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    205

    OK

    concordo!!!!

    chiedo ancora pochi dettagli:

    avendo rand.nextInt()%6 come funzia l'operatore resto?

    Ijn questo caso dovrebbe dare da -5 a 5 ma non capisco il meccanismo!!


    MERCIIIIIIIIIIII

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,307
    L'operatore resto (Modulo: %) restituisce il resto della divisione di x per il valore dopo l'operatore. Non potrà mai dare un valore negativo: il resto di una divisione va sempre da 0 a (|divisore|-1). In questo caso, quindi, restituisce un valore compreso fra 0 e 5.


    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

  9. #9
    Il risultato è effettivamente un intero compresto tra -5 e 5. Il motivo è che la funzione Random.nextInt() restituisce anche valori negativi. Dividendo un numero negativo per un numero positivo (6) si ottiene un numero negativo come risultato e il resto sarà anch'esso negativo!

    Es: -151 / 6 = -25 con il resto di -1

    Su come funziona l'operatore modulo penso sia stato chiaro Lele, cioè ti restituisce il resto della divisione.

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,307
    Originariamente inviato da Lancill
    Il risultato è effettivamente un intero compresto tra -5 e 5. Il motivo è che la funzione Random.nextInt() restituisce anche valori negativi. Dividendo un numero negativo per un numero positivo (6) si ottiene un numero negativo come risultato e il resto sarà anch'esso negativo!

    Es: -151 / 6 = -25 con il resto di -1

    Su come funziona l'operatore modulo penso sia stato chiaro Lele, cioè ti restituisce il resto della divisione.
    Effettivamente è così (anche se MATEMATICAMENTE il risultato è ERRATO). Per definizione, infatti, il resto della divisione NON PUO' ESSERE NEGATIVO. Purtroppo, i processori, questo non lo sanno :gren:

    Nell'esempio precedente, infatti, -151 / 6 = -26 con il resto di +5.
    (-26) * 6 + 5 = -151.


    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

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.