Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di 810106
    Registrato dal
    Jun 2008
    Messaggi
    67

    [C] var = expr + expr ? expr : expr; come viene interpretato?

    Rigà mi son trovato a scrivere questa espressione:
    codice:
    ni = i / 2 + i / 2 == ni ? 1 : 0;
    Che poi NON viene interpretata come io vorrei, cioè:
    SE i / 2 è UGUALE A ni ALLORA ni = i / 2 + 1
    ALTRIMENTI ni = i / 2
    Il compilatore me la interpreta giusta solo se racchiudo l'operatore ternario dentro alle parentesi:
    codice:
    ni = i / 2 + (i / 2 == ni ? 1 : 0);
    Mi spiegate come legge questa espressione il compilatore rispettando le precedenze
    se io non metto le parentesi? non conosco bene la precedenza degli operatori... :rollo:
    Free software: free as freedom!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Viene prima effettuata la somma. Dato che gli operatori hanno eguale precedenza, l'espressione procede normalmente da sinistra a destra.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3

    Re: [C] var = expr + expr ? expr : expr; come viene interpretato?

    codice:
    ni = i / 2 + i / 2 == ni ? 1 : 0;
    è uguale a dire

    codice:
    ni = (i / 2 + i / 2 == ni) ? 1 : 0;
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  4. #4

    Re: [C] var = expr + expr ? expr : expr; come viene interpretato?

    Togliti ogni dubbio ed abbonda con le parentesi ;-) che al compilatore non fanno mica male.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: Re: [C] var = expr + expr ? expr : expr; come viene interpretato?

    Originariamente inviato da MacApp
    Togliti ogni dubbio ed abbonda con le parentesi ;-) che al compilatore non fanno mica male.
    Concordo pienamente ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Già; personalmente con l'operatore ? ho preso la pratica di mettere tra parentesi ogni "pezzo" dell'espressione se non è banale, e spesso anche l'intero blocco per andare sul sicuro:
    codice:
    var = 10 + abs(z+y) * ((obj!=NULL && obj->IsInitialized())?(obj->GetValue()+obj->GetValue2()):1)
    ; se l'espressione è piuttosto intricata (come in questo caso) anche abbondare con i ritorni a capo non va mai male:
    codice:
    var = 
        10 + abs(z + y) 
        *
          (
            (obj != NULL && obj->IsInitialized())
                ?
            (obj->GetValue() + obj->GetValue2())
                :
            1
          )
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it L'avatar di 810106
    Registrato dal
    Jun 2008
    Messaggi
    67

    Scusate la mia ignoranza...

    Ma quando il signore distribuiva l'intelligenza sottoforma di pioggia... mi mona ghe verto l'ombreo!
    Cmq, qual'è la precedenza degli operatori? Sono sempre stato convinto che `/' e '*' abbiano la precedenza su '+' e '-'... mi sbaglio?
    Free software: free as freedom!

  8. #8

    Re: Scusate la mia ignoranza...

    Originariamente inviato da 810106
    Ma quando il signore distribuiva l'intelligenza sottoforma di pioggia... mi mona ghe verto l'ombreo!
    Cmq, qual'è la precedenza degli operatori? Sono sempre stato convinto che `/' e '*' abbiano la precedenza su '+' e '-'... mi sbaglio?
    più o meno la stessa dell'algebra scolastica

    ciao

  9. #9
    Qui c'è tutto quel che c'è da sapere in merito.
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: Scusate la mia ignoranza...

    Originariamente inviato da 810106
    `/' e '*' abbiano la precedenza su '+' e '-'... mi sbaglio?
    Non ti sbagli ... infatti vengono eseguite prima le due divisioni / ma subito dopo viene eseguita la somma e poi il resto dell'espressione ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.