Cosa cambiano le parentesi in questa funzione

di il
12 risposte

Cosa cambiano le parentesi in questa funzione

Sale a tutti,

Ho un dubbio riguardo a questo programma in c++ dunque è così:


int c = 0;

if(c == (1 && 0)) // quattro parentesi

cout<<"CIAO "<<c;


e l'output del programma è : CIAO 0

mentre senza le parentesi tra 1 && 0 cioè :

if(c == 1 && 0) //due parentesi

cout<<"CIAO"<<c;

non c'è l'output del programma viene ignorato.

Cosa cambiano le parentesi ? qual'è la differenza tra (1 && 0) e senza 1 && 0 ???

grazie in anticipo.

12 Risposte

  • Re: Cosa cambiano le parentesi in questa funzione

    Nel primo caso, viene prima eseguito il confronto 1 && 0 che dà come risultato 0. Dunque, la condizione c == 0 risulta vera e il codice viene eseguito.
    Il secondo caso equivale alla scrittura (c == 1) && 0 che risulta falsa, di conseguenza il codice non viene eseguito.
  • Re: Cosa cambiano le parentesi in questa funzione

    Si infatti avevo notato che lo zero deve essere sempre presente anche se scrivo ( 12345 && 0) non è come ( 12345 && 1)ma non capivo perché le parentesi si comportano in questo modo , non dovrebbero secondo me. Dovrebbero comportarsi allo stesso modo cioè sempre leggere c == 1.

    ( c == 1 && 0) è c == 1

    e

    ( c == (1 && 0)) sempre c == 1
  • Re: Cosa cambiano le parentesi in questa funzione

    Scusami, ma sai cosa fa l'operatore && ?
  • Re: Cosa cambiano le parentesi in questa funzione

    Ma non è che volevi scrivere

    if(c == 1 && a == 0)

    o qualcosa di simile?

    In pratica, cosa volevi fare?
  • Re: Cosa cambiano le parentesi in questa funzione

    tuixte ha scritto:


    Scusami, ma sai cosa fa l'operatore && ?
    L'operatore && è l'AND logico, mentre || l'OR logico, ! il NOT logico e ^ lo XOR logico.
  • Re: Cosa cambiano le parentesi in questa funzione

    Appunto.. Scrivere (1 && 0) dà come risultato 0, come è giusto che sia!
    Secondo quale logica c == (1 && 0) dovrebbe essere equivalente a c == 1?
  • Re: Cosa cambiano le parentesi in questa funzione

    tuixte ha scritto:


    Appunto.. Scrivere (1 && 0) dà come risultato 0, come è giusto che sia!
    Secondo quale logica c == (1 && 0) dovrebbe essere equivalente a c == 1?
    Nessuna logica... infatti

    c == (1 && 0) se c = 0 da TRUE mentre
    c == 1 da FALSE

    credo che aleasia si sia "ingrippato" su questa cosa...
  • Re: Cosa cambiano le parentesi in questa funzione

    Infatti si, rispondevo ad aleasia quando dice:

    aleasia ha scritto:


    Dovrebbero comportarsi allo stesso modo cioè sempre leggere c == 1.

    ( c == 1 && 0) è c == 1

    e

    ( c == (1 && 0) sempre c == 1
  • Re: Cosa cambiano le parentesi in questa funzione

    Allora avevo dimenticato una ")" parentesi

    (c == 1 && 0) bene qui ci sono due parentesi e da 1 come risultato mentre

    (c == ( 1&&0 )) qui ci sono quattro parentesi e da 0 come risultato perché 1 && 0 sono tra parentesi

    mentre dovrebbero secondo la logica dare sempre 1 e non capisco quale sia la logica delle parentesi.
  • Re: Cosa cambiano le parentesi in questa funzione

    L'operatore == ha precedenza rispetto a &&.
    Nel caso
    c == 1 && 0
    viene eseguito prima c == 1 che dà 0, poi 0 && 0 che dà 0.
    Nel caso
    c == (1 && 0)
    viene eseguito prima 1 && 0 che dà 0, poi c == 0 che dà 1.
  • Re: Cosa cambiano le parentesi in questa funzione

    Capito grazie,

    solo per precedenza allora.bene.
  • Re: Cosa cambiano le parentesi in questa funzione

    Esattamente. Questo tipo di precedenza ti permette di effettuare confronti multipli del tipo
    a == 0 && b == 1 && c == 2 && ...
    senza utilizzare parentesi, risparmiando tempo.
    In ogni caso, se hai dubbi su quale operazione venga eseguita prima e quale dopo, utilizzale sempre.
    Saluti
Devi accedere o registrarti per scrivere nel forum
12 risposte